说我有这个枚举:
public enum MyEnum{
ValueOne = 1,
ValueTwo = 2,
ValueThree = 3
}
然后是这个字段/变量:
public MyEnum myEnumInstance = MyEnum.ValueTwo;
我需要通过来自其他类的反射获取name
myEnumInstance
。
我试过了:
myClassInstance.GetType().GetField("myEnumInstance").GetValue(myClassInstance)
无论ValueOne
设置为何,都始终返回myEnumInstance
。
如何通过反射获取枚举字段的字符串值/名称?
答案 0 :(得分:3)
你不需要反思。您只需致电.ToString()
。
myEnumInstance.ToString();
将输出"ValueTwo"
;
但是,如果您坚持使用反射,以下示例可以正常工作:
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
来表示一些强类型的句法糖:
myClassInstance.GetType()
.GetField(nameof(myEnumInstance))
.GetValue(myClassInstance);
如果您仍然无法访问该字段,那是因为它不是公共的,如示例代码中所述,您需要传入适当的绑定标记。
myClassInstance
.GetType()
.GetField(nameof(myEnumInstance),
BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance)
.GetValue(myClassInstance);