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不是以通用方式识别的。
我也知道这个网站:Converting a string to a class name和How do I use reflection to call a generic method?
但是对我没有帮助,因为我不知道枚举的类型它不总是性别,可以是100个其他的枚举。我知道枚举的名称是字符串,而不是类型。
发布于 2015-01-02 03:16:09
不,你不能使用那样的泛型方法。你必须在编译时拥有泛型类型。
您不需要调用您的EnumUtils.ParseFromString()方法。直接调用Enum.Parse()即可。
String typeNameString;
...
Type enumType = Type.GetType(typeNameString,true);
Object parsed = Enum.Parse(enumType, value, true)发布于 2015-01-02 03:17:44
我能想到的最通用的方法是从您的解析方法返回一个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);
}https://stackoverflow.com/questions/27733765
复制相似问题