2010-01-04 85 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()); 
相关问题