由于在MEF中导出泛型类型而引起的混乱,我对此感到困惑
我注意到:
new Dictionary<string,bool>().GetType() == typeof(Dictionary<,>)
false
new Dictionary<string,bool>().GetType().GetGenericTypeDefinition() == typeof(Dictionary<,>)
true
Run Code Online (Sandbox Code Playgroud)
然而,Dictionary <,>本身不被视为'类型',因为这实际上会产生编译错误:
new Dictionary<string,bool> as Dictionary<,>
Type expected
new Dictionary<string,bool> is Dictionary<,>
Type expected
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,Dictionary <,>实际上是一种类型?.NET对泛型类型的处理方式与非泛型类型不同吗?
现在在MEF中我可以导出一个泛型类
[Export(typeof(MyGenericClass<,>))]
Run Code Online (Sandbox Code Playgroud)
这将满足进口要求,如
[Import]
public MyGenericClass<string, long> Instance { get; set; }
Run Code Online (Sandbox Code Playgroud)
我对这里的类型系统规则感到困惑
请参阅"开放式通用类型"究竟是什么.您所指的是一种未绑定的泛型类型,并在同一篇文章中进行了解释.的未结合的通用型实际上是一种类型,但它只能在内使用typeof()的表达.注意:与C#Java不同,允许使用表达式List<?>.