当枚举类型也被命名为字符串时,来自字符串的ParseEnum

时间:2015-01-01 19:08:28

标签: c# string enums

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

我可以这样做:

var parsed = EnumUtils.ParseFromString<Gender>("Man");

但有时我会将enum类型作为字符串。我可以将字符串转换为枚举类型并在我的EnumUtils中使用它。

我喜欢:

Type enumType = Type.GetType(Gender,true);
Object o = (Activator.CreateInstance(enumType)); 

var parsed = EnumUtils.ParseFromString<enumType>("Man");

但没有工作。 enumType未通过通用方式识别。

我也知道这个网站: Converting a string to a class nameHow do I use reflection to call a generic method?

但是没有帮助我,因为我不知道Enum的类型它并不总是性别,可以是100个其他枚举。我知道枚举的名称是字符串而不是类型。

2 个答案:

答案 0 :(得分:2)

不,你不能使用这样的通用方法。您必须在编译时具有泛型类型。

您无需拨打EnumUtils.ParseFromString()方法。只需直接致电Enum.Parse()

String typeNameString;
 ...
Type enumType = Type.GetType(typeNameString,true);
Object parsed =  Enum.Parse(enumType, value, true)

答案 1 :(得分:1)

我能想到的最常用的泛型方法是从你的解析方法中返回Enum类型:

enum MyEnum
{
    Value1
}

Type enumType = typeof(MyEnum);
string enumString = "Value1";
Enum enumValue = enumString.ToEnum(enumType);

另外,您可以将解析方法转换为扩展名:

public static Enum ToEnum(this string value, Type enumType)
{
    return (Enum)Enum.Parse(enumType, value, true);
}