2
A
回答
6
你可以這樣做:
MyEnum oMyEnum = (MyEnum) Enum.Parse(typeof(MyEnum), "stringValue");
2
使用Enum.Parse
:
(EnumType)Enum.Parse(typeof(EnumType), "EnumString");
1
或者在這樣的方法把它包裝:
T ParseEnum<T>(string stringValue)
{
return (T) Enum.Parse(typeof(T), stringValue);
}
2
我通常使用的通用枚舉類這個東西:
public static class Enum<T>
{
public static T Parse(string value)
{
return (T)Enum.Parse(typeof(T), value);
}
public static List<T> GetValues()
{
List<T> values = new List<T>();
foreach (T value in Enum.GetValues(typeof(T)))
values.Add(value);
return values;
}
public static string GetName(object value)
{
return Enum.GetName(typeof(T), value);
}
// etc
// you also can add here TryParse
}
用法更簡單:
Enum<DayOfWeek>.Parse("Friday");
1
.NET提供的System.Enum類型的一些靜態方法來做到這一點,除了實際執行中投,有幾件事情需要考慮代碼:
- 你要知道其中包含枚舉類型您將施放的值。
- 謹慎考慮一下這樣一個事實,即您嘗試投射的字符串值可能未在您的目標枚舉類型上定義。
所以,如果你有一個枚舉:
public enum TestEnum
{
FirstValue,
SecondValue
}
然後由System.Enum類提供了以下2種靜態方法將字符串值轉換爲一個枚舉類型:
枚舉。 IsDefined(.NET 1.1 - 4 +的Silverlight)(使用)
TestEnum testEnum;
if(Enum.IsDefined(typeof(TestEnum), "FirstValue"))
{
testEnum = (TestEnum)Enum.Parse(typeof(TestEnum), "FirstValue");
}
Enum.TryParse(.NET 4 + Silverlight中)(使用)
TestEnum testEnum;
bool success = Enum.TryParse("FirstValue", out testEnum);
或者,如果您不需要執行任何安全檢查,則會提供Enum.Parse方法(如其他人所述)。然而,如果你試圖做這樣的事情在我們的例子中,
Enum.Parse(TestEnum, "ThisValueDoesNotExist")
那麼.NET將拋出你必須處理System.ArgumentException。總之,儘管你所要求的語法很簡單,但我建議考慮確保無錯代碼,尤其是在解析從用戶輸入中獲取的字符串時,有一些預防措施。如果字符串來自設置文件或其他類型的值,您可以確定它是在您的枚舉類型中定義的,那麼可以跳過我在回答中列出的一些額外步驟。
我希望這有助於!
5
雖然所有的Enum.Parse人都是正確的,但現在有Enum.TryParse!
這大大改善了事情。
相關問題
- 1. 將SqlDataType投射到C#Enum
- 2. 不能投ENUM到INT dot42
- 3. Cast string to enum
- 4. 如何將Hive中的Array [Struct [String,String]]列類型投射到Array [Map [String,String]]?
- 5. C++投到void
- 6. 我怎麼能投String到枚舉
- 7. C#Enum in C++ Library
- 8. 如何從swift訪問enum目標C
- 9. 將enum轉換爲列表<string>
- 10. Java:`enum` vs`String`作爲參數
- 11. Mysql空ENUM到postgresql ENUM
- 12. C++「Floating Point Enum」
- 13. 轉換列表<Enum>轉換成Seq [(String,String)]
- 14. 在C++中使用enum
- 15. 基於Switch enum將對象投射到WebControl?
- 16. C#在HTML中標記HTML標記
- 17. c string string strncpy
- 18. ClassCastException在投票列表<String>到類<?>
- 19. Enum HWND屬性C++
- 20. C Enum is all Zeroes
- 21. Set in enum for C#
- 22. c#enum描述度
- 23. 獲得從Enum C#
- 24. C:地圖串ENUM
- 25. C/C++ enum和char *數組
- 26. Div標記投擲空引用異常
- 27. 標記的投擲錯誤(Markdown) - 流星
- 28. Drupal:更改投票/高級投票的整個標記
- 29. xml反序列化<string>標記
- 30. 的WebMethod回報String(不<?xml標記)
可能的重複[如何將字符串轉換爲C#中的枚舉?](http://stackoverflow.com/questions/16100/how-do-i-convert-a-string-to-an-enum -in-c)另請參閱:[Enum.Parse(),肯定是一個更好的方法?](http://stackoverflow.com/questions/2394725/enum-parse-surely-a-neater-way)。 –