首页 > 解决方案 > 如何比较枚举数组值和控制台输入?

问题描述

如何检查是否有用户从控制台输入的值。

我有五个枚举值:

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)
    {

    }
}

例如用户输入“apple”,如何进入if-block?

标签: arrays.netenums

解决方案


这里的主要问题是==在这一行:

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

具体来说,因为arrayFruitsisArray而不是Fruits[],所以这是一个object ==测试,它是与新装箱值的引用比较,它永远不会返回 true(它是引用相等)。

解决方案:

  1. 将数组转换为Fruits[]并使用typedArray[i] == fruit- 然后使用整数相等比较两个枚举,或者
  2. 处理时使用Equals而不是==object

第一种选择是迄今为止更好的选择。


推荐阅读