2016-12-18 2 views
0

Скажем, у меня есть консольное приложение с помощью следующего кода:Enum индексы из строки

Enum FoodItems 

    apple 
    banana 
    pineapple 

End Enum 

Sub Main() 

    Dim input As String = Console.ReadLine() 

End Sub 

Я хочу, чтобы иметь возможность получить значение из определенного элемента в FoodItems если вход имеет то же значение как имя члена из перечисления; т.е. получить 1, когда вход «банан». Как это можно сделать, отключив этот код?

ответ

0

Я не знал, правильно ли я понял: вы хотите, чтобы пользователь что-то написал, если это что-то является словом в вашем Enum, выход будет «номером слова в Enum»? Например, если я пишу банан, то приложение запишет 1. Если это то, что вы хотите, вы легко можете сделать это следующим образом:

If input = FoodItems.banana.ToString() Then Console.WriteLine(FoodItems.banana) 
    Console.ReadLine() 

Если вы хотите, чтобы проверить все элементы в Enum у вас есть на выбор:

Sub Main() 
    Dim input As String = Console.ReadLine() 
    Select Case input 
     Case FoodItems.apple.ToString() 
      Console.WriteLine(FoodItems.apple) 
     Case FoodItems.banana.ToString() 
      Console.WriteLine(FoodItems.banana) 
     Case FoodItems.pineapple.ToString() 
      Console.WriteLine(FoodItems.pineapple) 
    End Select 
    Console.ReadLine() 
End Sub 

Возможно, есть лучший способ сделать это, но я бы сделал это так.

0

Вы можете попробовать это - он отлично работал для меня. Функция ниже возвращает индекс перечисления, если строка является перечислением или возвращает -1, если нет.

<Flags> Friend Enum test 
    banana 
    apple 
    orange 
    pear 
End Enum 

Private Function ReturnEnum(inputString As String) As Integer 
    Dim a As test 
    Try 
     a = test.Parse(GetType(test), inputString) 
    Catch 
     Return -1 
    End Try 
    Return CInt(a) 
End Function