C# 获取枚举实例的名称
假设我有这个枚举:C# 获取枚举实例的名称,c#,reflection,enums,C#,Reflection,Enums,假设我有这个枚举: public enum MyEnum{ ValueOne = 1, ValueTwo = 2, ValueThree = 3 } 然后这个字段/变量: public MyEnum myEnumInstance = MyEnum.ValueTwo; 我需要通过反射从另一个类获得myEnumInstance的名称 我试过: myClassInstance.GetType().GetField("myEnumInstance").GetValue(myC
public enum MyEnum{
ValueOne = 1,
ValueTwo = 2,
ValueThree = 3
}
然后这个字段/变量:
public MyEnum myEnumInstance = MyEnum.ValueTwo;
我需要通过反射从另一个类获得myEnumInstance
的名称
我试过:
myClassInstance.GetType().GetField("myEnumInstance").GetValue(myClassInstance)
它总是返回ValueOne
,无论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);
@FiringSquadWitness可能重复不,不是重复,我的问题完全不同。我很难从一开始就得到这个值我还不清楚为什么你需要反思。。。为什么不myClassInstance.myEnumInstance.ToString()
?@JasonP很难解释,但基本上我有一个库存系统,它有几个不同的类,用于不同类型的项目。我正在制作一个编辑器来显示所有itme不同类的字段。因为我将它编程为泛型,并且没有任何特定于类的代码,所以我需要使用反射来访问字段。我的系统可以处理除枚举以外的所有内容。@Keith请看-它会生成您想要的结果。我倾向于投票结束这篇文章,因为它无法复制,因为问题似乎真的存在于某个与问题完全无关的地方。我编辑了这个问题,补充说我是从另一个类访问这个问题的。我这样做需要反思。相信我,我会做myEnumInstance.ToString()代码>如果是这么简单:)您应该仍然能够调用myClassInstance.myEnumInstance.ToString()
即使您进行了编辑?@Keith NStuke根据您的编辑应该是正确的。您仍然可以调用.ToString()
。
myClassInstance
.GetType()
.GetField(nameof(myEnumInstance),
BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance)
.GetValue(myClassInstance);