0

我正在尝试将通用列表用作ServicedComponent类的属性...

public class MyCOM : ServicedComponent {
    public enum MyEnumType {
        Value1, Value2, Value3
    }
    public List<MyEnumType> MyList { private set; get; }
    public MyCOM()
    {
        MyList = new List<MyEnumType>();
    }
}

代码编译没有错误,但是当我尝试使用MyList来自不同类的 com 对象上的属性时,没有值被添加到列表中。谷歌“告诉我”我不能在组件上使用泛型,但我还没有找到一个很好的解释为什么会这样以及一个很好的解决问题的方法。

有人可以帮我吗?

4

1 回答 1

2

来自 MSDN:

使用泛型类型进行互操作

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

不支持泛型的答案很简单,泛型是在运行时构造的类型,因此对于 COM 可以引用的构造类型没有静态接口声明。在您的情况下, List< MyEnumType > 在 CLR 构造它之前不作为类型存在,因此 COM 不能使用标识符 (GUID) 来引用它。

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

于 2008-10-02T11:03:09.913 回答