4

创立:

typeof(System.Enum).IsClass == false

System.Enum也变得奇怪了.IsValueType == false,但是 Reflector 表明它真的只是一个abstract class.

System.Enum是一个引用类型,如 aSystem.ValueType和将枚举值转换为System.Enum引用引起的装箱/拆箱。这里没有惊喜。

Type但是,阶级不讲自然真相的理由是什么System.Enum?类型的反射行为没有什么特别之处,System.Enum使它看起来不是引用类型。

4

2 回答 2

6

这是 .Net 1.1 和 2.0 的问题。我没有在 3.0 中检查它

来自 MSDN 用户David Bernstein

System.Enum 类型的 IsClass 属性返回“false”,即使“System.Enum”继承自“System.ValueType”并且“typeof(System.ValueType).IsClass”返回“true”(如预期的那样)。同时,typeof(System.Enum).IsValueType 按预期返回“false”。这种观察到的行为似乎与上面的明确文档相矛盾,该文档规定:“对于表示 Enum 和 ValueType 的 Type 实例,此属性返回 true。” 我发现框架 1.1 和 2.0 都是这种情况。

于 2009-11-02T15:31:31.247 回答
3

我最近碰巧在 CLR4 下重新审视了这个问题,猜猜是什么,它现在已修复。以下定义:

public struct SomeValueType{}

public enum SomeEnum
{
    FirstElement
}

有了这个程序

Console.WriteLine( typeof( Enum ).IsClass );
Console.WriteLine( typeof( SomeEnum ).IsClass );

Console.WriteLine( typeof( ValueType).IsClass );
Console.WriteLine( typeof( SomeValueType).IsClass );

产生以下结果:

CLR2: False, False, True, False 
CLR4: True, False, True, False
于 2011-10-17T14:10:44.677 回答