我有一个接口,在这些行中定义了一些东西:
Interface foo
{
int someProperty {get; set;}
Dictionary<string, object> Items;
}
实现此接口的具体类需要为COM Interop注册。一切都编译好,程序集似乎注册正常,但是当试图创建COM对象时(例如从PowerShell)我得到一个错误。
这似乎与通用词典&lt;&gt;有关。我正在使用的课程。所以这是一个问题:
答案 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);
}