由于在MEF中导出泛型类型而引起的混乱,我对此感到困惑
我注意到了:
new Dictionary<string,bool>().GetType() == typeof(Dictionary<,>)
false
new Dictionary<string,bool>().GetType().GetGenericTypeDefinition() == typeof(Dictionary<,>)
true
然而词典&lt;,&gt;本身不被视为'类型',因为这实际上会产生编译错误:
new Dictionary<string,bool> as Dictionary<,>
Type expected
new Dictionary<string,bool> is Dictionary<,>
Type expected
所以我的问题是,是Dictionary&lt;,&gt;实际上是一种? .NET对泛型类型的处理方式与非泛型类型不同吗?
现在在MEF中,我可以将通用类导出为
[Export(typeof(MyGenericClass<,>))]
这将满足像
这样的导入要求[Import]
public MyGenericClass<string, long> Instance { get; set; }
我对这里的类型系统规则感到困惑
答案 0 :(得分:5)
见What exactly is an “open generic type”。您所指的是未绑定的泛型类型,并在同一post中进行了解释。 未绑定泛型类型实际上是一种类型,但它只能在typeof()
表达式中使用。注意:与C#Java不同,Java允许使用List<?>
等表达式。
答案 1 :(得分:0)
是,MyType&lt;,&gt;是一种类型。 这是一个“开放式通用”类型,请参阅What exactly is an "open generic type" in .NET?