的typeof(System.Enum).IsClass ==假

问题描述:

成立即:的typeof(System.Enum).IsClass ==假

typeof(System.Enum).IsClass == false 

它已经成为奇怪的是System.Enum也已经.IsValueType == false,但反射表明,它实际上只是一个abstract class

System.Enum是一个引用类型,如System.ValueType和铸造枚举值/从System.Enum引用引起的装箱/拆箱。这里没有惊喜。

但是Type这个类的原因是什么原因不能说出System.Enum的性质? System.Enum类型的反射行为使其看起来不像参考类型没有任何特殊之处。

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

从MSDN用户David Bernstein

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

+0

同一问题上的.Net 3.5 – bdukes 2009-11-24 20:31:51

+0

保持在.NET 4.0中 – Custodio 2011-05-17 20:21:57

我恰巧最近在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 
+0

有趣,THX! – ControlFlow 2011-10-17 21:47:02