如何公开DIctionary<>到COM Interop

时间:2009-08-18 20:38:33

标签: c# generics com-interop

我有一个接口,在这些行中定义了一些东西:

Interface foo
  {
  int someProperty {get; set;}
  Dictionary<string, object> Items;
  }

实现此接口的具体类需要为COM Interop注册。一切都编译好,程序集似乎注册正常,但是当试图创建COM对象时(例如从PowerShell)我得到一个错误。

这似乎与通用词典&lt;&gt;有关。我正在使用的课程。所以这是一个问题:

  1. 甚至可以通过COM Interop公开通用集合吗?
  2. 如果是,那怎么办?
  3. 如果不是,那么解决方法是什么?

2 个答案:

答案 0 :(得分:5)

我最后通过Google搜索结束了,哈哈,我应该猜到这会来自你。

据我所知,仿制药无法通过COM与标准编组进行编组。我所知道的是C#中的ArrayList变成了COM中的“标准”集合,可以被VBScript,VB,JScript 5.x等使用。但是因为我们正朝着共同的目标努力,所以我要去玩与其他一些聚合类型,看看会发生什么。

答案 1 :(得分:2)

泛型不可见COM,VS应该给你一个编译时警告。

另一种解决方案可能是将字典设为私有,并公开在字典中添加/删除/获取项目的方法:

public interface ComVisibleFoo
{
    int SomeProperty { get; set; }

    //Dictionary<string, object> Items; // can't be COM-visible

    void AddItem(string key, object value);
    void RemoveItem(string key);
    object Item(string key);
}