2009-01-25 19 views
9

Jak wykonać proste porównanie wartości wyliczeniowej z ciągiem, który powinien być zgodny z nazwą wyliczenia?Jak przetestować pod kątem String = Enum.Value?

Jak przeanalizować ciąg znaków w jego odpowiedniej wartości wyliczeniowej.

Na przykład

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

Jak mogę sprawdzić, czy String = A.c i jak mogę przekonwertować ciąg do odpowiadającej jej wartości bez porównywania go do reprezentacji ciąg?

+2

przy okazji, jeśli chcesz zawsze wyliczenia rozpocząć o wartości 0 (zero), nie trzeba tego mówić, tylko BCD wystarczy – balexandre

+0

Nie wiedziałem tego, dzięki za napiwek. – Middletone

Odpowiedz

17

Istnieje kilka różnych metod, które są powiązane:

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

Pierwsze dwa przekonwertować wartość A.C na sznurku reprezentacja ("C"), a następnie porównać ją z ciągiem znaków. Ostatnia konwertuje ciąg "C" na typ A, a następnie porównuje jako rzeczywisty typ A.

Enum na ciąg: enumValue.ToString() lub Enum.GetName(typeof(A), A.C)

String do ENUM: (A)Enum.Parse(typeof(A), "C")

Należy pamiętać, że żaden z nich nie będzie działać, jeśli naprawdę wyliczenie jest oznaczony FlagsAttribute.

+0

Proste i dobrze wyjaśnione. – Roylee

5

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

7

Enum.Parse Metoda:

przekształca ciąg znaków z nazwisko lub wartość liczbową od jeden lub więcej wyliczonych stałych do równoważnej wyliczenia obiektu. Parametr określa, czy w przypadku operacji jest rozróżniana wielkość liter.

Oto przykład kodu VB.NET z 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

Można również użyć funkcji nazwa(), aby sprawdzić ten

A.C.name() == "C" 
Powiązane problemy