c#中的反射



我最近开始了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

相关内容

  • 没有找到相关文章

最新更新