Как сравнить значения массива enum и консольный ввод? - PullRequest
1 голос
/ 02 ноября 2019

Как проверить, есть ли значение, которое пользователь вводит с консоли.

У меня есть пять значений перечисления:

enum Fruits
{
    apple = 1,
    orange,
    banana,
    chery,
    kiwi
}

И создал массив этих значений:

Array arrayFruits = Enum.GetValues(typeof(Fruits));

Следующий код:

Console.WriteLine("Enter plant");
string plantNotLow = Console.ReadLine();
string plant = plantNotLow.ToLower();

object element = Enum.Parse(typeof(Fruits), plant);
Fruits fruit = (Fruits)element;

Array arrayFruits = Enum.GetValues(typeof(Fruits));

for (int i = 0; i < arrayFruits.Length; i++)
{
    if(arrayFruits.GetValue(i) == element)
    {

    }
}

Например, пользователь вводит "яблоко", как войти в блок if?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2019

литье на фрукты:

if ((Fruits)arrayFruits.GetValue(i) == (Fruits)element)
0 голосов
/ 02 ноября 2019

Основной проблемой здесь является == в этой строке:

if(arrayFruits.GetValue(i) == element)

В частности, поскольку arrayFruits является Array, а не Fruits[], это тест object ==, которыйявляется сравнением ссылок со свежесобранным значением, которое никогда не вернет true (это равенство ссылок).

Решения:

  1. приведите массив к Fruits[] и используйте typedArray[i] == fruit - тогда сравниваются два перечисления с использованием целочисленного равенства, или
  2. использует Equals вместо == при работе с object

Первый вариант, безусловно, лучшеопция.

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