根据typeof的文件:
[...]要获取表达式的运行时类型,可以使用.NET Framework方法
GetType
因此,这意味着typeof
必须是编译时表达式。
在关于Generic Type Parameters的文章中,声明:
[...]此特定类的type参数可以是编译器识别的任何类型。
编译器识别的任何类型都是编译器推断的任何类型,即编译时所知的任何类型。
如果这是真的,那么为什么不允许以下语句?
int value = GenericMethod<typeof(int)>();
答案 0 :(得分:3)
typeof()返回一个Type对象,就像.GetType()一样,它不能用来代替一个类型。您可以做的是将<T>
放在您的班级名称之后,然后:
T value = GenericMethod<T>();