【问题标题】:typeof(System.Enum).IsClass == falsetypeof(System.Enum).IsClass == false
【发布时间】:2009-11-02 15:23:19
【问题描述】:

创立于:

typeof(System.Enum).IsClass == false

System.Enum 也有 .IsValueType == false 变得很奇怪,但 Reflector 显示它实际上只是一个 abstract class

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

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

【问题讨论】:

    标签: .net reflection enums reference-type


    【解决方案1】:

    这是 .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 都是这种情况。

    【讨论】:

      【解决方案2】:

      我最近碰巧在 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多