首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当枚举类型也命名为like string时,来自字符串的ParseEnum

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

Stack Overflow用户
提问于 2015-01-02 03:08:28
回答 2查看 183关注 0票数 1
代码语言:javascript
复制
public static T ParseEnum<T>(string value)
        {
            return (T) Enum.Parse(typeof (T), value, true);
        }

我可以简单地这样做:

代码语言:javascript
复制
var parsed = EnumUtils.ParseFromString<Gender>("Man");

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

我试着喜欢:

代码语言:javascript
复制
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?

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

EN

回答 2

Stack Overflow用户

发布于 2015-01-02 03:16:09

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

您不需要调用您的EnumUtils.ParseFromString()方法。直接调用Enum.Parse()即可。

代码语言:javascript
复制
String typeNameString;
 ...
Type enumType = Type.GetType(typeNameString,true);
Object parsed =  Enum.Parse(enumType, value, true)
票数 2
EN

Stack Overflow用户

发布于 2015-01-02 03:17:44

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

代码语言:javascript
复制
enum MyEnum
{
    Value1
}

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

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

代码语言:javascript
复制
public static Enum ToEnum(this string value, Type enumType)
{
    return (Enum)Enum.Parse(enumType, value, true);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27733765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档