arrays - 如何比较枚举数组值和控制台输入?
问题描述
如何检查是否有用户从控制台输入的值。
我有五个枚举值:
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)
具体来说,因为arrayFruits
isArray
而不是Fruits[]
,所以这是一个object ==
测试,它是与新装箱值的引用比较,它永远不会返回 true(它是引用相等)。
解决方案:
- 将数组转换为
Fruits[]
并使用typedArray[i] == fruit
- 然后使用整数相等比较两个枚举,或者 - 处理时使用
Equals
而不是==
object
第一种选择是迄今为止更好的选择。
推荐阅读
- rust - 从实现 Drop 的结构中移动值时,如何避免不必要的匹配检查或使用不安全?
- reactjs - 使用 React Hook 时如何在组件卸载时取消绑定 Pusherjs 事件?
- umbraco - 向 Umbraco 8 成员索引添加一个字段
- apache-flink - Flink CEP 未检测到最后一条记录
- html - 如何在 HTML 中获取选择方向?
- vba - VBA 使用 ahtCommonOpenFileSave 和 ahtOFN_ALLOWMULTISELECT,选择单个文件时出错
- complexity-theory - 如何确定任何程序的时间复杂度?
- module - 如何在 Fedora 构建系统之外创建一个 dnf 模块?
- python - google colab 上的 Gpt2 训练(内存不够)
- javascript - 如何将一类 div 从上到下移动?