.net - 获取枚举值的 GetFields 方法

标签 .net reflection enums

  • 我注意到在调用 GetFields() 时在枚举类型上,我得到了一个 int32 类型的额外字段。它从哪里来的??
  • 当我调用另一个重载 (GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static) ) ,它返回所需的字段。这是否意味着枚举的字段不是 Public ?

  • 谢谢

    最佳答案

    反光板 IL Spy可以解释这一点。

    看一下反编译的枚举,您会看到如下所示的内容:

    .class public auto ansi sealed ConsoleApplication1.Foo
        extends [mscorlib]System.Enum
    {
        // Fields
        .field public specialname rtspecialname int32 value__
        .field public static literal valuetype ConsoleApplication1.Foo Bar = int32(0)
        .field public static literal valuetype ConsoleApplication1.Foo Baz = int32(1)
    
    } // end of class ConsoleApplication1.Foo
    

    Foo枚举被实现为一个封装了 int32 的密封类。调用value__ - 您看到的额外字段。

    值得注意的是,它也继承自 System.Enum它也有额外的(静态)字段。

    关于.net - 获取枚举值的 GetFields 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8149591/

    相关文章:

    java - 获取参数类型反射

    java - 将Cucumber场景DataTable(HashMap)转换为方法调用

    .net - LoadFrom 和上下文

    php - MySQL枚举删除反斜杠

    enums - 枚举尝试失败

    c# - 可以在 .Net 4.0 中使用 Tuple 的实际示例?

    c# - License.licx 文件和许可/未许可机器

    swift - 如何使枚举可通过其案例名称而不是其原始值进行解码?

    c# - 现在开始为任务并行库设计是否为时过早?

    c# - 如何仅在整个文本被括号包围时才删除括号?