【问题标题】:Trying to iterate trough enum using foreach and witch case尝试使用 foreach 和 switch case 遍历枚举
【发布时间】:2021-11-12 11:34:20
【问题描述】:

我创建了枚举并尝试使用 for-each 循环遍历它,并使用 switch case 查找不同的情况并获取使用的潜水值。 我得到的错误是 无法将 type'console5.typeOfDevice' 隐式转换为 'string'

enum typeOfDevice
    {
        iphone=99,
        android=59,
        tablet=49
    }
var usedDevice = Enum.GetNames(typeof(typeOfDevice));
foreach (string used in usedDevice)
                {
                    switch (used)
                    {
                        case usedDevice.iphone: //gets error here
                            Console.Write($"enter how many time you used Iphone");
                            var input = Console.ReadLine();
                            break;
                        case usedDevice.android:
                            Console.Write($"enter how many time you used Android");
                            var input = Console.ReadLine();
                            break;
                        case usedDevice.tablet:
                            Console.Write($"enter how many time you used Tablet");
                            var input = Console.ReadLine();
                            break;
                        default:
                            break;
                    }
                }

【问题讨论】:

  • 问题/问题是什么?
  • 无法将 type'console5.typeOfDevice' 隐式转换为 'string' 得到此错误
  • 你需要使用Enum.GetValues而不是Enum.GetNames,但是在这里使用枚举似乎没有必要。
  • used 是一个字符串,因此您需要针对字符串类型对其进行测试,例如:case "iphone":

标签: c# foreach enums switch-statement


【解决方案1】:

Enum.GetNamesreturns a string array。在您的循环中,您试图获取 usedDevice.iphone (等),但 usedDevice 是一个字符串数组,因此您会收到错误消息。但是,如果您将 usedDevice 更改为 typeOfDevice,则会收到您在问题中编辑的比较错误。

used 是字符串类型,它不能隐式转换为typeOfDevice,因为typeOfDevice 是枚举,而不是字符串。

This question may be useful to you。简而言之,使用GetValues 而不是GetNames

【讨论】:

  • 谢谢你成功了..
猜你喜欢
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
相关资源
最近更新 更多