我试图从.NET程序集返回一系列部门,以便通过COM Interop使用ASP.使用.NET我会返回一个通用集合,例如List<Department>,但似乎泛型不适用于COM Interop.那么,我的选择是什么?
我想迭代列表并能够通过索引访问项目.我应该继承List<Department>,实施IList,IList<Department>或另一个接口,或者是有没有更好的办法?理想情况下,我不希望为我需要的每种类型的列表实现自定义集合.此外,List[index]甚至可以使用COM Interop?
谢谢,迈克
public class Department {
public string Code { get; private set; }
public string Name { get; private set; }
// ...
}
public class MyLibrary {
public List<Department> GetDepartments() {
// return a list of Departments from the database
}
}
Run Code Online (Sandbox Code Playgroud)
<%
Function PrintDepartments(departments)
Dim department
For Each department In departments
Response.Write(department.Code & ": " & department.Name & "<br />")
Next …Run Code Online (Sandbox Code Playgroud) 我注意到,如果我创建一个公开ArrayList的.NET组件,那么该ArrayList将通过COM Interop并以脚本语言(如VBScript)提供.
泛型,如IList<T>似乎没有工作.
为什么这样,是否有任何方法可以使通用类型成功地通过COM Interop流向脚本引擎?
好吧,我想在VBA中使用几个.NET类.所以我必须通过COM注册它们.我想我已经找到了COM注册(最后),但现在我需要有关如何创建对象的语法的帮助.这是一些伪代码,显示了我想要做的事情.
编辑:更改附加对象以返回ArrayList而不是List
.NET类看起来像这样......
public class ResourceManagment
{
public ResourceManagment()
{
// Default Constructor
}
public static List<RandomObject> AttachedObjects()
{
ArrayList list = new ArrayList();
return list;
}
}
public class RandomObject
{
//
public RandomObject(int someParam)
{
}
}
Run Code Online (Sandbox Code Playgroud)
好的,这就是我想在VBA中做的事情(用C#演示),但我不知道怎么做......
public class VBAClass
{
public void main()
{
ArrayList myList = ResourceManagment.AttachedObjects();
foreach(RandomObject x in myList)
{
// Do something with RandomObject x like list them in a Combobox
}
}
}
Run Code Online (Sandbox Code Playgroud)
需要注意的一点是RandomObject没有公共默认构造函数.所以我无法创建它的实例Dim x As New RandomObject.MSDN说你不能通过COM实例化一个没有默认构造函数的对象,但是如果它被另一个方法返回,你仍然可以使用它.Types …