的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都是这种情况。
我恰巧最近在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
有趣,THX! – ControlFlow 2011-10-17 21:47:02
同一问题上的.Net 3.5 – bdukes 2009-11-24 20:31:51
保持在.NET 4.0中 – Custodio 2011-05-17 20:21:57