Type.IsPrimitive是否适用于泛型类型?

问题描述 投票:0回答:1

如果我编写以下通用方法:

static bool HelloWorld<TSource>(TSource input)
{
    return typeof(TSource).IsPrimitive;
}

并且我将int传递给它,它成功地将其识别为原语。例如,如果我传递字符串,则不会-这意味着它可以工作。

documentation指出它虽然不应该工作,否则我会错过阅读的东西吗?

如果当前Type表示通用类型,或者泛型类型或泛型方法的定义,此属性总是返回false。

c# generics .net-core reflection types
1个回答
2
投票

您已经回答了自己的问题...您说:

我将int传递给它,它成功地将其识别为原语

如果传递了int,则TSource int,并且不是“通用类型”或“类型参数”。

当文档说“类型参数”时,它是指Type属性为true的IsGenericParameter对象。

例如,您可以获得这样的IsGenericParameter对象

Type

注意此处使用非构造类型typeof(List<>).GetGenericArguments()[0] // this will give a Type object that represents a type parameter ,这一点至关重要。

要获取方法的类型参数,您需要获取方法的List<>,然后调用MethodInfo

© www.soinside.com 2019 - 2024. All rights reserved.