Как проверить на String = Enum.Value? - PullRequest
9 голосов
/ 25 января 2009

Как выполнить простое сравнение значения перечисления и строки, которая должна соответствовать имени перечисления?

Как мне разобрать строку в соответствующее ей значение перечисления.

Например,

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

Как проверить, что String = A.C, и как преобразовать строку в соответствующее ей значение A, не сравнивая ее со строковым представлением?

Ответы [ 4 ]

17 голосов
/ 25 января 2009

Существует несколько различных методов:

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.

7 голосов
/ 25 января 2009

Метод Enum.Parse :

Преобразует строковое представление имя или числовое значение одного или более перечисленные константы к эквивалентный перечислимый объект. параметр указывает, является ли операция чувствительна к регистру.

Вот пример кода VB.NET из 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
5 голосов
/ 25 января 2009

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

2 голосов
/ 06 января 2011

Вы также можете использовать функцию name (), чтобы проверить это

A.C.name() == "C"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...