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

时间:2012-11-17 18:45:05

标签: c# .net clr mef

由于在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; }

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

2 个答案:

答案 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?