一个泛型类型MyType<,>实际上是一个类型吗?

3

我在使用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; }

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

2个回答

5
请参考这篇文章,其中详细介绍了“开放泛型类型”是什么。而你所提到的是“未绑定泛型类型”,同样在这篇文章中有解释。一个“未绑定泛型类型”实际上是一种类型,但它只能在typeof()表达式中使用。请注意:与C#不同,Java允许使用像List<?>这样的表达式。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接