如何测试String = Enum.Value?

时间:2009-01-25 00:06:48

标签: vb.net enums

如何对枚举值和应与枚举名称匹配的字符串进行简单比较?

如何将字符串解析为适当的枚举值。

例如,

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

如何检查String = A.C以及如何将字符串转换为相应的A值而不将其与字符串表示进行比较?

4 个答案:

答案 0 :(得分:17)

有几种不同的方法相关:

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

前两个将A.C的值转换为字符串表示形式("C"),然后将其与字符串进行比较。最后一个将字符串"C"转换为类型A,然后将其作为实际类型A进行比较。

枚举为字符串:enumValue.ToString()Enum.GetName(typeof(A), A.C)

枚举字符串:(A)Enum.Parse(typeof(A), "C")

请注意,如果枚举标有FlagsAttribute,则其中任何一个都无法正常工作。

答案 1 :(得分:7)

Enum.Parse方法:

  

转换字符串表示形式   一个或的名称或数值   更多枚举的常量   等效的枚举对象。一个   参数指定是否   操作区分大小写。

这是来自MSDN的VB.NET示例代码:

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 :(得分:5)

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

答案 3 :(得分:2)

您还可以使用name()函数来检查

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