在服务组件上使用通用列表

时间:2008-10-02 10:40:34

标签: generics com list

我正在尝试将通用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属性时,没有值被添加到列表中。谷歌“告诉我”我不能在组件上使用泛型,但我还没有找到一个很好的解释,为什么这是一个很好的解决方案。

有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

来自MSDN:

  

Interoperating Using Generic Types

     

COM模型不支持   通用类型的概念。   因此,通用类型不可能   直接用于COM互操作。

为什么不支持泛型的答案非常简单,泛型是在运行时构造的类型,因此没有对COM可以引用的构造类型的静态接口声明。在你的情况下List&lt; MyEnumType&gt;不存在作为类型直到CLR构造它,所以COM不能用它和标识符(GUID)引用它。

这是解决方法的来源,如果您的泛型类型实现非泛型接口,那么它们可以用于使用非泛型接口的com interop。