我正在通过Asp.Net MVC课程并了解到,对于一种方法来确定控制器的动作,
我对某些泛型有所了解并在某种程度上使用它们,但是:
可能重复:
C#语言:泛型,打开/关闭,绑定/未绑定,构造
在使用C#中的反射做一些事情时,我注意到某些类型具有类型定义,例如
Foo<,>
Run Code Online (Sandbox Code Playgroud)
这种表示法的官方术语是什么?
由于在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)
我对这里的类型系统规则感到困惑