我最近开始了c#的开发,并希望在以下情况下使用反射。如果我有一个Enum类
Enum Operation
{
Read=0;
Write;
}
如果输入为
String str = "Operation.Write";
我应该能够得到输出为1;
或
如果常量定义为
const int Read=0;
const int Write=1;
如果输入是
String str = "Read";
输出应为0
请帮。
可以使用Enum。解析具有该功能。
如果我们把你们的建议结合起来,我们可以得到这样的东西。public static Operation getOperationByName(String name) {
return Enum.Parse(typeof(Operation),name);
}
其中名称不应为空,并表示枚举中的名称或位置
"Read"
将返回Operation.Rerad
, "1"
将返回Operation.Write
下面是通过反射获取Enum类型而不需要硬编码的完整代码。ParseConstant方法也是泛型的,就是说你可以对任何类型使用它。
namespace MyNamgespace
{
public enum Operation
{
Read = 0,
Write
}
public class ClassWithConstants
{
public const int Read = 0;
public const int Write = 1;
}
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine((ParseEnum("Operation.Write")));
Console.WriteLine((ParseContant<ClassWithConstants>("Write")));
Console.ReadLine();
}
static int ParseEnum(string enumValue)
{
var typeName = enumValue.Split('.')[0];
var valueName = enumValue.Split('.')[1];
var enumType = Type.GetType(string.Format("MyNamespace.{0}", typeName));
var op = (Operation) Enum.Parse(enumType, valueName);
return (int)op;
}
static int ParseContant<T>(string constantName)
{
var type = typeof (T);
var field = type.GetField(constantName, BindingFlags.Static | BindingFlags.Public);
return (int)field.GetValue(null);
}
}
}
var name = Enum.GetName(typeof(Operation), Operation.Write) //name = 'Write'
var value = Enum.Parse(typeof(Operation), "Write") //value = Operation.Write