我正在尝试将通用List用作ServicedComponent
类的属性...
public class MyCOM : ServicedComponent {
public enum MyEnumType {
Value1, Value2, Value3
}
public List<MyEnumType> MyList { private set; get; }
public MyCOM()
{
MyList = new List<MyEnumType>();
}
}
代码编译没有错误但是当我尝试在来自不同类的com对象上使用MyList
属性时,没有值被添加到列表中。谷歌“告诉我”我不能在组件上使用泛型,但我还没有找到一个很好的解释,为什么这是一个很好的解决方案。
有人能帮助我吗?
答案 0 :(得分:1)
来自MSDN:
Interoperating Using Generic Types
COM模型不支持 通用类型的概念。 因此,通用类型不可能 直接用于COM互操作。
为什么不支持泛型的答案非常简单,泛型是在运行时构造的类型,因此没有对COM可以引用的构造类型的静态接口声明。在你的情况下List&lt; MyEnumType&gt;不存在作为类型直到CLR构造它,所以COM不能用它和标识符(GUID)引用它。
这是解决方法的来源,如果您的泛型类型实现非泛型接口,那么它们可以用于使用非泛型接口的com interop。