【问题标题】:Using typeof as a generic type argument使用 typeof 作为泛型类型参数
【发布时间】:2015-08-28 20:30:32
【问题描述】:

根据typeof的文档:

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

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

在关于Generic Type Parameters的文章中说:

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

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

如果这是真的,那为什么下面的说法是不允许的?

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

【问题讨论】:

  • 因为 typeof() 返回一个代表参数的 Type 对象。它本身不是一种类型。这也是一个表达式,根据 C#LS,在那个地方是不允许的。

标签: c# .net generics typeof


【解决方案1】:

typeof() 返回一个 Type 对象,就像 .GetType() 一样,它不能用来代替类型。你可以做的是在你的班级名称后面加上&lt;T&gt;,然后:

T value = GenericMethod<T>();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多