成立:
typeof(System.Enum).IsClass == false
System.Enum
也有.IsValueType == false
,这很奇怪,但Reflector表明它实际上只是abstract class
。
System.Enum
是一个类似于System.ValueType
的引用类型,并且从/ System.Enum
引用的强制枚举值导致装箱/拆箱。这里没有惊喜。
但是Type
课程不能说出System.Enum
性质的真相是什么原因?
System.Enum
类型的反射行为没有任何特别之处,使其看起来不像引用类型。
答案 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