关于c#:获取Enum实例的名称

Get name of Enum instance

假设我有这个枚举:

1
2
3
4
5
public enum MyEnum{
    ValueOne = 1,
    ValueTwo = 2,
    ValueThree = 3
}

然后这个字段/变量:

1
public MyEnum myEnumInstance = MyEnum.ValueTwo;

我需要通过另一个类的反射得到EDOCX1的name

我试过:

1
myClassInstance.GetType().GetField("myEnumInstance").GetValue(myClassInstance)

它总是返回ValueOne,不管myEnumInstance设置为什么。

如何通过反射获取枚举字段的字符串值/名称?


你不需要反思。你只需要打电话给.ToString()

1
myEnumInstance.ToString();

输出"ValueTwo"

但是,如果您坚持使用反射,那么下面的示例工作得很好:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var myClassInstance = new MyClass();
myClassInstance.GetType()
               .GetField("myEnumInstance")
               .GetValue(myClassInstance);

public enum MyEnum
{
    ValueOne = 1,
    ValueTwo = 2,
    ValueThree = 3
}

public class MyClass
{
    public MyEnum myEnumInstance = MyEnum.ValueTwo;
}

注意,在C 6中,您还可以使用nameof来表示某些强类型的语法结构:

1
2
3
myClassInstance.GetType()
               .GetField(nameof(myEnumInstance))
               .GetValue(myClassInstance);

如果您仍然无法访问该字段,那是因为它不像示例代码中描述的那样是公共的,在示例代码中您需要传递适当的绑定标志。

1
2
3
4
5
myClassInstance
    .GetType()
    .GetField(nameof(myEnumInstance),
        BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance)
    .GetValue(myClassInstance);