2009-01-25 24 views
9

Làm cách nào để so sánh đơn giản giá trị enum và chuỗi phải khớp với tên enums?Làm thế nào để kiểm tra String = Enum.Value?

Làm cách nào để phân tích chuỗi thành giá trị enum thích hợp.

Ví dụ,

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

Làm thế nào để kiểm tra xem String = A.C và làm thế nào để chuyển đổi chuỗi thành một giá trị tương ứng của nó mà không so sánh nó với một chuỗi đại diện?

+2

bằng cách này, nếu bạn luôn muốn enum bắt đầu với giá trị 0 (zero), bạn không cần phải nói, chỉ BCD là đủ – balexandre

+0

Tôi không biết điều đó, cảm ơn mẹo. – Middletone

Trả lời

17

Có nhiều phương pháp khác nhau có liên quan:

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

Hai đầu tiên chuyển đổi các giá trị của A.C thành một chuỗi đại diện ("C") và sau đó so sánh nó với một chuỗi. Người cuối cùng chuyển đổi chuỗi "C" thành loại A và sau đó so sánh như một loại thực tế A.

Enum để chuỗi: enumValue.ToString() hoặc Enum.GetName(typeof(A), A.C)

String để enum: (A)Enum.Parse(typeof(A), "C")

Lưu ý rằng không ai trong số những người thực sự sẽ làm việc nếu liệt kê được đánh dấu bằng FlagsAttribute.

+0

Đơn giản và được giải thích rõ ràng. – Roylee

5

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

7

Các Enum.Parse phương pháp:

Chuyển đổi chuỗi đại diện của tên hoặc giá trị số của một hoặc hằng liệt kê nhiều hơn đến một đối tượng liệt kê tương đương. Tham số chỉ định xem hoạt động có phân biệt chữ hoa chữ thường hay không.

Đây là VB.NET mã ví dụ từ 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

Bạn cũng có thể sử dụng tên() để kiểm tra điều này

A.C.name() == "C" 
Các vấn đề liên quan