這裏有很多關於將字符串轉換爲枚舉值的問題。一般來說,答案看起來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