2010-01-04 54 views
11

我有一個枚舉:不能字符串轉換爲枚舉類型,我創建

public enum Color 
{ 
    Red, 
    Blue, 
    Green, 
} 

現在,如果我讀這些顏色從一個XML文件中的文字串,我怎麼能轉換爲枚舉類型顏色。

class TestClass 
{ 
    public Color testColor = Color.Red; 
} 

現在,通過使用一個字符串,像這樣設置該屬性的時候,我從編譯器很嚴厲的警告。 :D無法從字符串轉換爲顏色。

任何幫助?

TestClass.testColor = collectionofstrings[23].ConvertToColor?????; 

回答

29

是這樣的東西你在找什麼?

TestClass.testColor = (Color)Enum.Parse(typeof(Color), collectionofstrings[23]); 
+0

無法將類型對象隱式轉換爲顏色(枚舉)。 在這種情況下我能做些什麼? – 2010-01-04 00:19:29

+0

@Sergio然後你錯過了明確的演員(彩色) – pauloya 2011-08-23 09:59:12

8

嘗試:

TestClass.testColor = (Color)Enum.Parse(typeof(Color), collectionofstrings[23]); 

documentation about Enum

編輯:在.NET 4.0中,你可以使用不拋出異常時,更類型安全的方法(和一個解析失敗):

Color myColor; 
if (Enum.TryParse(collectionofstring[23], out myColor)) 
{ 
    // Do stuff with "myColor" 
} 
+0

它說我無法從對象轉換爲彩色。任何幫助? – 2010-01-04 00:20:54

+2

然後,您可能會在Parse調用前忘記將顏色轉換爲Color。這肯定是從字符串到枚舉的方法。 – 2010-01-04 00:24:18

+0

@MattGreer當解析「失敗」時,這是一個更好的方法,如果你關心*。這是真的,如果它不能被真正解析,它不會拋出異常,但它會返回枚舉中的任何'0'項,並且你不知道它實際上失敗了。 – mmcrae 2016-01-14 22:35:17

0

您需要使用Enum.Par SE將字符串轉換爲正確的顏色枚舉值:

TestClass.testColor = (Color)Enum.Parse(typeof(Color), collectionofstrings[23], true); 
0

至於其他人說:

TestClass.testColor = (Color) Enum.Parse(typeof(Color), collectionofstrings[23]); 

如果你有一個問題,因爲collectionofstrings是對象的集合,然後嘗試這個:

TestClass.testColor = (Color) Enum.Parse(
    typeof(Color), 
    collectionofstrings[23].ToString());