tags:

views:

3846

answers:

3

How do I do a simple compare of an enum value and a string that should match the enums name?

How do I parse the string into it's appropriate enum value.

For example,

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

How do I check if String = A.C and how do I convert string into its corresponding A value without comparing it to a string representation?

+5  A: 

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

JoshBerke
+5  A: 

The Enum.Parse method:

Converts the string representation of the name or numeric value of one or more enumerated constants to an equivalent enumerated object. A parameter specifies whether the operation is case-sensitive.

Here's the VB.NET example code from 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
Mitch Wheat
+8  A: 

There are several different methods that are related:

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

The first two convert the value of A.C to a string representation ("C") and then compare it to a string. The last one converts the string "C" to a type A, and then compares as an actual type A.

Enum to string: enumValue.ToString() or Enum.GetName(typeof(A), A.C)

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

Note that none of those will really work if the enumeration is marked with FlagsAttribute.

earlNameless