2009-01-25 19 views
9

Bir enum değeri ile enums adının eşleşmesi gereken bir dize karşılaştırması nasıl yapılır?Dize = Enum.Value nasıl test edilir?

Dizeyi uygun enum değeriyle nasıl ayrıştırırım. String = aC'ye ve nasıl bir dize gösterimine karşılaştırmadan karşılık gelen bir değer haline dize dönüştürebilirim Örneğin

,

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

nasıl kontrol edersiniz?

+2

kontrol etmek adı() işlevini kullanabilirsiniz – balexandre

+0

yeterli olduğunu bilmiyordum, bahşiş için teşekkürler. – Middletone

cevap

17

ilişkili birkaç farklı yöntem vardır:

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

ilk iki bir dizeye A.C değerini dönüştürmek temsil ("C") ve sonra bir dizeyle karşılaştırın. Sonuncusu "C" dizgesini A türüne dönüştürür ve daha sonra gerçek tip A olarak karşılaştırır. dizeye

Enum: enumValue.ToString() veya Enum.GetName(typeof(A), A.C)

dize enum: numaralandırma FlagsAttribute ile işaretlenmiş ise o hiçbiri gerçekten çalışacağını (A)Enum.Parse(typeof(A), "C")

Not.

+0

Basit ve iyi açıklanmış. – Roylee

5

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

7

Enum.Parse yöntemi:

bir eşdeğer sayılan nesneye adı ya da bir veya daha fazla numaralandırılmış sabitler sayısal değeri dize temsilini dönüştürür. parametresi, işleminin büyük/küçük harfe duyarlı olup olmadığını belirtir.

İşte MSDN gelen VB.NET örneği kod:

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

her zaman değer 0 (sıfır) ile başlayan enum istiyorsanız da sadece, BCD bunu söylemeye gerek yok, bu arada bu

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