簡體   English   中英

如何比較枚舉數組值和控制台輸入?

[英]How to compare enum array values and console input?

如何檢查是否有用戶從控制台輸入的值。

我有五個枚舉值:

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?

這里的主要問題是這一行中的==

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

具體來說,因為arrayFruitsArray而不是Fruits[] ,所以這是一個object ==測試,它是與新裝箱值的參考比較,它永遠不會返回 true(它是參考相等)。

解決方案:

  1. 將數組轉換為Fruits[]並使用typedArray[i] == fruit - 然后使用 integer 相等性比較兩個枚舉,或者
  2. 在處理object時使用Equals而不是==

第一種選擇是迄今為止更好的選擇。

投射到水果:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM