我在使用MEF导出通用类型时遇到了一些困惑。
我注意到:
new Dictionary<string,bool>().GetType() == typeof(Dictionary<,>)
false
new Dictionary<string,bool>().GetType().GetGenericTypeDefinition() == typeof(Dictionary<,>)
true
然而,Dictionary<,>本身并不被认为是一个“类型”,因为这实际上会生成编译错误:
new Dictionary<string,bool> as Dictionary<,>
Type expected
new Dictionary<string,bool> is Dictionary<,>
Type expected
我的问题是,Dictionary<,>实际上是一种类型吗?.NET是否与非泛型类型不同地处理泛型类型?
现在在MEF中,我可以将一个泛型类导出为
[Export(typeof(MyGenericClass<,>))]
这将满足像导入要求这样的需求。
[Import]
public MyGenericClass<string, long> Instance { get; set; }
我对类型系统的规则感到困惑