2010-01-04 15 views
11

tengo una enumeración:no pudo convertir una cadena de tipo Enum creé

public enum Color 
{ 
    Red, 
    Blue, 
    Green, 
} 

Ahora si leo esos colores como cadenas literales de un archivo XML, cómo puedo convertir al tipo de enumeración del color.

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

Ahora al establecer ese atributo mediante el uso de una cadena literal como tal, recibo una advertencia muy duras del compilador. : D No se puede convertir de cadena a Color.

¿Algún ayuda?

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

Respuesta

29

¿Es algo así como lo que estás buscando?

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

No se puede convertir implícitamente el tipo Objeto en Color (la enumeración). ¿Qué puedo hacer en este caso? –

+0

@Sergio Luego, omitió el molde explícito (Color) – pauloya

8

Probar:

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

Ver documentation about Enum

Editar: en .NET 4.0 se puede utilizar un método de tipo seguro más (y también uno que no lanza excepciones cuando el análisis falla):

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

Dice que no puedo convertir de Objeto a Color. ¿Alguna ayuda? –

+2

Entonces es probable que hayas olvidado el elenco de Colorear delante de la llamada a Parse. Este es el método seguro para pasar de cadena a enumeración. –

+0

@MattGreer esta es una mejor manera de hacerlo si * cuidas * cuando el análisis "falla". Es cierto que no arrojará una excepción si no puede ser analizada en realidad, sino que devolverá lo que sea que ingrese '0' en la enumeración y usted no tendrá idea de que realmente falló. – mmcrae

0

Tiene que usar Enum.Par sí para convertir la cadena para el correcto valor de enumeración Color:

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

Como todo el mundo ha dicho:

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

Si tiene un problema porque la collectionofstrings es una colección de objetos, a continuación, tratar esto:

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