【发布时间】:2017-09-26 23:54:47
【问题描述】:
当尝试使用静态类作为类型参数时,C# 编译器会抛出错误:
var test = new List<Math>();
错误 CS0718:`System.Math':静态类不能用作通用参数
这些问题已经涵盖了这一点:
但是,我刚刚意识到我可以通过反射创建类型,并且运行时不会抱怨:
var test = Activator.CreateInstance(typeof(List<>).MakeGenericType(typeof(Math)));
我是否认为 CLR 级别支持这一点,但语言级别不支持?
或者这是规范中的灰色区域,意味着我应该避免使用这些通用构造类型?
【问题讨论】:
-
CLR 支持它,因为
static只是一个 C# 构造。静态类在 CLR 中编译为abstract sealed,这会阻止它们被实例化。更多信息在这里:stackoverflow.com/questions/25643276/… -
也许这是创建一个只能包含 NULL 的 List 的好方法 :)
标签: c# .net reflection clr