2012-01-04 2 views
0

Это очень легко у меня есть следующие EnumКак извлечь член Enum дал свое имя

Public Enum TCheckStatus 
     Checked 
     NotChecked 
     Indeterminate 
    End Enum 

Я хочу, чтобы получить индекс данного имени, найденного в перечислении, что это лучший способ? !!

Для примера:

Пусть я «NotChecked» строка, я хочу выход быть 1

+0

Что такое имя найдено в перечислении? –

+0

Предположим, у меня есть строка «NotChecked», я хочу, чтобы результат был 1 –

+1

Вы хотите индекс или значение? (Они могут быть не одинаковыми, если перечисление было объявлено с явными значениями, и я не могу придумать какой-либо веской причины, по которой вам нужен индекс, а не значение. Опираясь на индекс, а не на значение, было бы очень хрупким .) – LukeH

ответ

2

Вы ищете Enum.GetNames. Он извлекает массив имен констант в указанном перечислении.

Dim notCheckedStatus = DirectCast([Enum].Parse(GetType(TCheckStatus), "NotChecked"), TCheckStatus) 
Dim allStatusNames = [Enum].GetNames(GetType(TCheckStatus)) 
Dim indexOfNotChecked = Array.IndexOf(AllStatusNames, "NotChecked") '=1' 
  1. линия: разбирает string переменные в перечислимой стоимость
  2. линия: возвращает все перечислений-значение данного перечислимого типа, как Array
  3. линии: возвращает индекс заданного перечисления -значение в том, что Array

конечно, чтобы решить вопрос, который вы только это нужно:

Array.IndexOf([Enum].GetNames(GetType(TCheckStatus)), "NotChecked") 
+0

Благодарим вас за подробный ответ. –

+0

Этот ответ возвращает индекс, в некоторых сценариях он может отличаться от значения. Например, Enum, начинающийся с значения 1 или когда что-то удалено или перегруппировано. Значение можно получить с помощью следующего кода vb.net: 'CInt (System.Enum.Parse (GetType (TCheckStatus),« NotChecked »))'. –

1

Я не могу дать точный синтаксис VB, но я буду писать в C# так если вы можете использовать его:

int index = (int)Enum.Parse(typeof(TCheckStatus), "NotChecked"); 

index является 1 в этом случае. Если вы указали неверную строку (не являющуюся членом перечисления), она выдает исключение. Если это не то, что вы хотите, вместо этого вы можете использовать Enum.TryParse.

Если у вас уже есть перечисление, вы можете просто бросить его в междунар получить индекс:

var myEnum = TCheckStatus.NotChecked; 
int index = (int)myEnum; 
+2

Обратите внимание, что если enum объявлен с явными значениями, тогда '(int) myEnum' даст вам * значение *, не обязательно индекс. Использование индекса очень хрупкое и не очень хорошая идея, так как разработчик может законно предположить, что участники могут быть смело переупорядочены, пока они сохраняют свои ценности. – LukeH

+0

Когда я сказал индекс, я действительно имел в виду ценность, но хорошо, что вы дали понять всем. –

1

Чтобы получить массивы имен и их целочисленных эквивалентов с методами Enum в VB.NET, используйте методы GetNames() и GetValues ​​(). Используйте Parse() для получения индекса. Надеюсь это поможет.

1
int Output = (int)Enum.Parse(typeof(TCheckStatus), "NotChecked"); 
Смежные вопросы