在服务组件上使用泛型列表



我正在尝试使用通用列表作为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 属性时,不会将任何值添加到列表中。谷歌"告诉我"我不能在组件上使用泛型,但我还没有找到一个很好的解释,为什么会这样,也没有解决这个问题的好方法。

有人可以帮助我吗?

来自 MSDN:

使用泛型类型进行互操作

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

不支持泛型

的答案非常简单,泛型是在运行时构造的类型,因此没有 COM 可以引用的构造类型的静态接口声明。在你的案例 List 中 在 CLR 构造它之前不作为类型存在,因此 COM 无法使用和标识符 (GUID) 引用它。

这就是解决方法的来源,如果您的泛型类型实现了非泛型接口,则可以使用非泛型接口将它们用于 com 互操作。

最新更新