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

时间:2020-03-06 15:01:10  来源:igfitidea点击:

我正在尝试使用通用列表作为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:

Interoperating Using Generic Types
  
  The COM model does not support the
  concept of generic types.
  Consequently, generic types cannot be
  used directly for COM interop.

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

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