Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net COM互操作的通用集合有哪些替代方案?_.net_Generics_Collections_Asp Classic_Com Interop - Fatal编程技术网

.net COM互操作的通用集合有哪些替代方案?

.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

我试图从.NET程序集中返回一个部门集合,ASP将通过COM互操作使用该集合。使用.NET我只会返回一个泛型集合,例如
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