.net COM互操作的通用集合有哪些替代方案?
我试图从.NET程序集中返回一个部门集合,ASP将通过COM互操作使用该集合。使用.NET我只会返回一个泛型集合,例如.net COM互操作的通用集合有哪些替代方案?,.net,generics,collections,asp-classic,com-interop,.net,Generics,Collections,Asp Classic,Com Interop,我试图从.NET程序集中返回一个部门集合,ASP将通过COM互操作使用该集合。使用.NET我只会返回一个泛型集合,例如List,但泛型似乎不能很好地与COM互操作配合使用。那么,我的选择是什么 我想迭代列表,并能够通过索引访问项目。我应该继承列表,实现IList、IList或其他接口,还是有更好的方法?理想情况下,我不希望为我需要的每种类型的列表都实现自定义集合。另外,List[index]甚至可以与COM互操作一起使用吗 谢谢, 迈克 NET组件(C#)示例: 公共课部{ 公共字符串代码{ge
List
,但泛型似乎不能很好地与COM互操作配合使用。那么,我的选择是什么
我想迭代列表,并能够通过索引访问项目。我应该继承列表
,实现IList
、IList
或其他接口,还是有更好的方法?理想情况下,我不希望为我需要的每种类型的列表都实现自定义集合。另外,List[index]
甚至可以与COM互操作一起使用吗
谢谢,
迈克
NET组件(C#)示例:
公共课部{
公共字符串代码{get;private set;}
公共字符串名称{get;private set;}
// ...
}
公共类图书馆{
公共部门名单({
//从数据库返回部门列表
}
}
ASP代码示例:
部门
第三部门
相关问题:
System.Collections.ArrayList
找到了一个解决方案。但是,这不适用于按索引获取值。为此,我创建了一个新类ComArrayList
,该类继承自ArrayList
,并添加了新方法GetByIndex
和SetByIndex
COM互操作兼容集合:
更新的.NET组件MyLibrary.GetDepartments:
更新的ASP:
第三部门
由于您只使用ASP中的数据,我建议返回部门[]
。这应该直接映射到COM中的SAFEARRAY。它还支持枚举和索引访问
public Department[] GetDepartments() {
var departments = new List<Department>();
// populate list from database
return departments.ToArray();
}
public Department[]GetDepartments(){
var departments=新列表();
//从数据库填充列表
返回部门。ToArray();
}
在ASP代码中,您不能这样做吗
<h1>The third department</h1>
<%= departments.Item(2).Name %>
第三部门
我知道在VB.NET中,C#indexer是通过“Item”属性支持的,所以同样的想法可能在ASP中也适用。我一直试图在VB.NET中解决同样的问题(C#不流利) 由于List(Of T)支持IList接口,因此对于我的对象的COM接口,我尝试指定
Public Class MyClass
...
Private _MyList As List(of MyObject)
Public ReadOnly Property MyList As IList Implements IMyClass.MyList
Get
Return _MyList
End Get
End Property
然后在COM看到的公共接口中指定
ReadOnly Property MyList As IList
对于一个典型的ASP客户端来说,这似乎工作得很好,该客户端实例化对象,调用生成器函数,然后像数组一样读取MyList属性
<h1>The third department</h1>
<%= departments.GetByIndex(2).Name %>
public Department[] GetDepartments() {
var departments = new List<Department>();
// populate list from database
return departments.ToArray();
}
<h1>The third department</h1>
<%= departments.Item(2).Name %>
Public Class MyClass
...
Private _MyList As List(of MyObject)
Public ReadOnly Property MyList As IList Implements IMyClass.MyList
Get
Return _MyList
End Get
End Property
ReadOnly Property MyList As IList