2

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

https://stackoverflow.com/questions/12434634

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>();
    }
}

我得到的结果是:

True
True
Is an enum
Is an enum

在阅读Type.IsEnumproperty的文档后,我希望结果是:

False
False
不是枚举
不是枚举

4

1 回答 1

8

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

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

于 2012-09-15T05:38:41.497 回答