Kei*_*h M 3 c# reflection enums
说我有这个枚举:
public enum MyEnum{
ValueOne = 1,
ValueTwo = 2,
ValueThree = 3
}
Run Code Online (Sandbox Code Playgroud)
然后这个字段/变量:
public MyEnum myEnumInstance = MyEnum.ValueTwo;
Run Code Online (Sandbox Code Playgroud)
我需要得到name的myEnumInstance通过反射从另一个类。
我试过:
myClassInstance.GetType().GetField("myEnumInstance").GetValue(myClassInstance)
Run Code Online (Sandbox Code Playgroud)
ValueOne无论myEnumInstance设置为什么,它始终返回。
如何通过反射获取枚举字段的字符串值/名称?
你不需要反思。你只需要调用.ToString().
myEnumInstance.ToString();
Run Code Online (Sandbox Code Playgroud)
这将输出"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;
}
Run Code Online (Sandbox Code Playgroud)
请注意,在 C#6 中,您还可以使用nameof一些强类型语法糖:
myClassInstance.GetType()
.GetField(nameof(myEnumInstance))
.GetValue(myClassInstance);
Run Code Online (Sandbox Code Playgroud)
如果您仍然无法访问该字段,那是因为它不像您的示例代码中描述的那样公开,您需要在其中传递适当的绑定标志。
myClassInstance
.GetType()
.GetField(nameof(myEnumInstance),
BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance)
.GetValue(myClassInstance);
Run Code Online (Sandbox Code Playgroud)