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 オブジェクトでプロパティを使用しようとすると、リストに値が追加されません。Googleは、コンポーネントでジェネリックを使用できないと「言った」が、その理由と問題の適切な解決策をまだ見つけていない.

誰かが私を助けることができますか?

4

1 に答える 1

2

MSDNから:

ジェネリック型を使用した相互運用

COMモデルは、ジェネリック型の概念をサポートしていません。したがって、ジェネリック型をCOM相互運用機能に直接使用することはできません。

ジェネリックスがサポートされない理由は非常に単純です。ジェネリックスは実行時に構築される型であり、このため、COMが参照できる構築された型への静的インターフェイス宣言はありません。あなたの場合、List <MyEnumType>は、CLRがそれを構築するまで型として存在しないため、COMは識別子(GUID)でそれを参照できません。

これが回避策の出所です。ジェネリック型が非ジェネリックインターフェイスを実装している場合は、非ジェネリックインターフェイスを使用したcom相互運用に使用できます。

于 2008-10-02T11:03:09.913 に答える