创建在C#中解析枚举的函数

时间:2012-06-11 12:32:00

标签: c#

我知道要将字符串解析为特定的enum,如:

enum AnEnumType 
{
   TEST_,
   OTHER_TEST_,
   OTHERS_
}

enum OtherEnumType 
{
   TEST1_,
   OTHER_TEST1_,
   OTHERS1_
}


string aValueString = "TEST_";

AnEnumType result = (AnEnumType)Enum.Parse(typeof(AnEnumType), aValueString);

所以,我想创建一个函数,一个使用解析器的函数,我的enum如下:

public Type ConvertStringToAnEnum(string value, Type anyType){

return (anyType)Enum.Parse(typeof(anyType), aValueString);
}

但我猜这不行......

如何制作解析在函数中指定为参数的任何枚举类型的函数?

就像我想拨打OtherEnumType result = ConvertStringToAnEnum("TEST1_", OtherEnumType)

一样

3 个答案:

答案 0 :(得分:6)

使通用方法通用:

public T ConvertStringToAnEnum<T>(string value){
  return (T)Enum.Parse(typeof(T), value);
}

用法:

OtherEnumType result = ConvertStringToAnEnum<OtherEnumType>("TEST1_");

答案 1 :(得分:2)

您可以尝试使用

public T ConvertStringToAnEnum<T>(string value)
{
    return (T)Enum.Parse(typeof(T), value);
}

有了这个,你可以做到 OtherEnumType tp2 = ConvertStringToAnEnum<OtherEnumType>("TEST1_");

或使用扩展方法

public static class Extensions
{
    public static T ToEnum<T>(this string value)
    {
        return (T)Enum.Parse(typeof(T), value);
    }
}

这样你可以做到

OtherEnumType tp2 = "TEST1_".ToEnum<OtherEnumType>();

答案 2 :(得分:0)

根据您想要获得的参与方式,您还可以使用属性为枚举值提供更具描述性的名称。 Associating Strings with enums in C#为如何做到这一点提供了很好的介绍。