这里有很多关于将字符串转换为枚举值的问题。一般来说,答案看起来this question类似的答案:Enum.Parse()为什么返回对象?
StatusEnum MyStatus = (StatusEnum) Enum.Parse(typeof(StatusEnum), "Active", true);
虽然这是一个完全合理的答案,你可以写简化呼叫的方法,它并没有回答为什么枚举的问题。 Parse()返回一个object
而不是适当的枚举值。为什么我必须将它投射到StatusEnum
?
编辑:
基本上,问题是,为什么像枚举类这不是一部分的功能?
public static T Parse<T>(string value) where T: struct
{
return (T)Enum.Parse(typeof (T), value);
}
此功能工作得很好,完全符合您的期望。 StatusEnum e = Enum.Parse<StatusEnum>("Active");
。
@ SpYk3HH - 枚举不*有*值。他们*是*值。它们是碰巧对'.ToString()'有通常重载的值,但它们仍然只是值。 – Bobson
.NET 4.0+已['Enum.TryParse'](http://msdn.microsoft.com/en-us/library/dd783499(V = VS.100)) –
@ SpYk3HH枚举类型的值是一些可能与某个枚举类型的字段关联的整数。整数的大小可能会有所不同。解析需要一些字符串并返回枚举类型的盒装实例。这可以拆箱或不拆箱。你的最后一句话也没有意义。字符串和布尔值也有工作的属性和方法。 – phoog