2009-01-25 14 views
9

¿Cómo hago una comparación simple de un valor enum y una cadena que debe coincidir con el nombre de las enumeraciones?¿Cómo se prueba para String = Enum.Value?

Cómo analizar la cadena en su valor de enumeración apropiado.

Por ejemplo,

Enum A 
    B=0 
    C=1 
    D=2 
End Enum 

¿Cómo verifico si String = A.C. y ¿Cómo se convierte en su correspondiente cadena Un valor sin compararla con una representación de cadena?

+2

por cierto, si siempre desea la enumeración comenzar con valor 0 (cero) no es necesario decirlo, simplemente BCD es suficiente – balexandre

+0

No lo sabía, gracias por la sugerencia. – Middletone

Respuesta

17

Hay varios métodos diferentes que están relacionados:

Enum.GetName(typeof(A), A.C) == "C" 
A.C.ToString() == "C" 
((A)Enum.Parse(typeof(A), "C")) == A.C 

Los dos primeros convertir el valor de A.C a una cadena representación ("C") y luego compararlo con una cadena. El último convierte la cadena "C" en un tipo A, y luego se compara como un tipo real A.

Enumeración de cadena: enumValue.ToString() o Enum.GetName(typeof(A), A.C)

cadena a ENUM: (A)Enum.Parse(typeof(A), "C")

Tenga en cuenta que ninguno de los que realmente va a funcionar si la enumeración está marcado con FlagsAttribute.

+0

Simple y bien explicado. – Roylee

5

Enum.GetName(typeof(A),enumValue)==stringValue

7

El Enum.Parse método:

Convierte la representación de cadena de el nombre o el valor numérico de uno o constantes más enumerados a un objeto enumerado equivalente . Un parámetro especifica si la operación distingue entre mayúsculas y minúsculas.

Aquí está el código VB.NET ejemplo de MSDN:

Module Example 
    Public Sub Main() 
     Dim colorStrings() As String = {"0", "2", "8", "blue", "Blue", "Yellow", "Red, Green"} 
     For Each colorString As String In colorStrings 
     Try 
      Dim colorValue As Colors = CType([Enum].Parse(GetType(Colors), colorString, True), Colors)   
      If [Enum].IsDefined(GetType(Colors), colorValue) Or colorValue.ToString().Contains(",") Then 
       Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString()) 
      Else 
       Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString)    
      End If      
     Catch e As ArgumentException 
      Console.WriteLine("{0} is not a member of the Colors enumeration.", colorString) 
     End Try 
     Next 
    End Sub 
End Module 
2

También puede utilizar la función de nombre() para comprobar esta

A.C.name() == "C" 
Cuestiones relacionadas