有没有办法将 switch 语句用于用户输入?C# [已关闭]

Is there any way to use switch statements for user input? C# [closed]

提问人:I am groot 提问时间:10/8/2023 最后编辑:I am groot 更新时间:10/8/2023 访问量:73

问:


想改进这个问题吗?通过编辑这篇文章来更新问题,使其仅关注一个问题。

上个月关闭。

我是初学者,所以如果这是一个愚蠢的问题,我深表歉意。我只想减少 if、else if 和 else 语句的数量,并使其使用 switch 语句或其他语句。我尝试使用 switch 语句,但似乎它们不能使用 ConsoleKey 变量。

我基本上想要这样的东西

var userIn = Console.ReadKey().Key;
switch (userIn)
{
   case ConsoleKey.X: //If user input is X
     //Do smthn
     break;
   case ConsoleKey.Z:
     //Do smthn
   break;
     default:
     //Smthn
     break;
}

再说一次,我仍然是一个初学者,所以是的

首先,我尝试编写 case :,但没有奏效。 然后我尝试将 ConsoleKey.Y 和其他输入存储在变量中,然后编写大小写,但这不起作用。

它显示了这些错误,

控制不能从一个案例标签 ('case ConsoleKey.Y:') 传递到另一个案例CS0163 无法隐式将类型“System.ConsoleKey”转换为“System.ConsoleKeyInfo”CS0029

这是我尝试过的: 该代码基本上是与牢房中的物体进行交互。

var jCellIntyuio = Console.ReadKey();
            switch(jCellIntyuio)
            {
                case ConsoleKey.Y:
                    jcToilet.ObjInfo(); //Method which gives info on object
                case ConsoleKey.U:
                    WashBasin.ObjInfo();
                case ConsoleKey.I:
                    BunkBed.ObjInfo(); //Method which gives info on object
                case ConsoleKey.U:
                    JailWalls.ObjInfo();
            }
C# switch-语句

评论

0赞 tomerpacific 10/8/2023
你能在你尝试的地方添加代码吗?
0赞 shingo 10/8/2023
“它不起作用”没有帮助
1赞 Auditive 10/8/2023
ConsoleKeyInfo是一个结构,包含有关按下键的一些信息。不仅是键本身,还有它的 char 和使用的修饰符(如 Ctrl 或 Alt)。因此,如果您切换外壳 - 您必须Keyvar jCellIntyuioConsole.ReadKey().Key
1赞 Michael Phillips 10/8/2023
Microsoft 文档: - Console.ReadKey 方法 - ConsoleKeyInfo 结构 - ConsoleKey 枚举
2赞 Zohar Peled 10/8/2023
“控制不能从一个案例标签 ('case ConsoleKey.Y:') 传递到另一个案例CS0163” - 你缺少一个案例。break;

答:

0赞 Recep 10/8/2023 #1

您应该将“jCellIntyuio.Key”写入开关,还应该添加中断和默认参数。代码应该是这样的;

switch (jCellIntyuio.Key)
        {
            case ConsoleKey.Y:
                jcToilet.ObjInfo(); break; //Method which gives info on object
            case ConsoleKey.U:
                WashBasin.ObjInfo(); break;
            case ConsoleKey.I:
                BunkBed.ObjInfo(); break;//Method which gives info on object
            case ConsoleKey.U:
                JailWalls.ObjInfo(); break;
            default: break;
        }

评论

0赞 I am groot 10/8/2023
非常感谢,这解决了问题!
0赞 Recep 10/11/2023
你能批准这个答案吗?