通用类型MyType <,>实际上是一个类型?

blu*_*utt 3 .net c# clr mef

由于在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)

我对这里的类型系统规则感到困惑

Oli*_*bes 5

请参阅"开放式通用类型"究竟是什么.您所指的是一种未绑定的泛型类型,并在同一篇文章中进行了解释.的未结合的通用型实际上是一种类型,但它只能在内使用typeof()的表达.注意:与C#Java不同,允许使用表达式List<?>.