使用 typeof 作为泛型类型参数

本文关键字:泛型类型参数 typeof 使用 | 更新日期: 2023-09-27 17:55:40

根据typeof的文档:

[...]若要获取表达式的运行时类型,可以使用 .NET Framework 方法GetType

因此,这意味着typeof必须是编译时表达式。

在关于泛型类型参数的文章中,指出:

[...]此特定类的类型参数可以是编译器识别的任何类型。

编译器识别的任何类型都是编译器推断的任何类型,即编译时已知的任何类型。

如果这是真的,那么为什么不允许以下陈述?

int value = GenericMethod<typeof(int)>();

使用 typeof 作为泛型类型参数

typeof() 返回一个 Type 对象,就像 .GetType() 会,它不能用来代替类型。不过,您可以做的是将类名放在<T>之后,然后:

T value = GenericMethod<T>();