typeof(System.Enum).IsClass == false

时间:2009-11-02 15:23:19

标签: .net reflection enums reference-type

成立:

typeof(System.Enum).IsClass == false

System.Enum也有.IsValueType == false,这很奇怪,但Reflector表明它实际上只是abstract class

System.Enum是一个类似于System.ValueType的引用类型,并且从/ System.Enum引用的强制枚举值导致装箱/拆箱。这里没有惊喜。

但是Type课程不能说出System.Enum性质的真相是什么原因? System.Enum类型的反射行为没有任何特别之处,使其看起来不像引用类型。

2 个答案:

答案 0 :(得分: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中都发现了这种情况。

答案 1 :(得分: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