当枚举类型也被命名为字符串时,从字符串中解析枚举

本文关键字:枚举 字符串 命名为 类型 | 更新日期: 2023-09-27 18:35:47

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

我可以简单地做:

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

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

我试过喜欢:

Type enumType = Type.GetType(Gender,true);
Object o = (Activator.CreateInstance(enumType)); 
var parsed = EnumUtils.ParseFromString<enumType>("Man");

但不起作用。 enumType不是以通用方式识别的。

我也知道这个网站:将字符串转换为类名和如何使用反射调用泛型方法?

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

当枚举类型也被命名为字符串时,从字符串中解析枚举

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

无需调用 EnumUtils.ParseFromString() 方法。 直接打电话Enum.Parse()即可。

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

我能想到的最通用的方法是从您的解析方法返回一个Enum类型:

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

此外,您可以将 parse 方法转换为扩展:

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