为什么typeof(T).IsEnum返回true,即使文档说它应该总是返回false?

Mer*_*ham 2 c# enums

试图回答这个问题时出现了这个问题:

/sf/ask/870424411/

对于文档Type.IsEnum属性说:

如果当前Type表示泛型类型或泛型方法的定义中的类型参数,则此属性始终返回false.

但我没有看到这种行为. typeof(T).IsEnum正在恢复true.为什么?我误解了文档吗?

示例代码:

using System;

static class Program
{
    public static void Test<TEnum>() where TEnum : struct
    {
        Console.WriteLine(typeof(TEnum).IsEnum);
    }

    public static void Test<TEnum>(this string text) where TEnum : struct
    {
        if (!typeof(TEnum).IsEnum)
        {
            Console.WriteLine("Not an enum");
            return;
        }

        Console.WriteLine("Is an enum");
    }

    public enum Test1
    {
        Value1,
        Value2,
    }

    public enum Test2 : byte
    {
        Value3,
        Value4,
    }

    static void Main(string[] args)
    {
        Test<Test1>();
        Test<Test2>();
        "".Test<Test1>();
        "".Test<Test2>();
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:


真正
是一个枚举
是一个枚举

阅读Type.IsEnum属性的文档后,我希望结果如下:

False
False
不是枚举
不是枚举

pho*_*oog 8

文档讨论的是表示开放泛型类型或方法的类型参数的类型对象.在您的代码中,您正在查询表示闭合泛型方法中的类型参数的类型对象,并且在您的示例中,当然,该类型参数枚举类型.

换句话说,该文档正在讨论通过调用GetGenericArguments而typeof(List<>)不是on typeof(List<SomeEnum>)获得的类型.