Console.ReadKey ();和Switch语句-使用字母
本文关键字:语句 Switch ReadKey Console | 更新日期: 2023-09-27 18:04:56
我正试图在c#中编写一个程序,该程序基本上基于用户按下的键(例如X = Quit, D = Disconnect等),通过使用Console.ReadKey();在c#中
我遇到的问题是如何在Switch语句中使用ReadKey信息。有人能帮忙吗?代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Switch_Test
{
class Program
{
static void Main()
{
Console.WriteLine("Welcome. Please enter your command: ");
string chinput;
int input;
bool activated = false;
input = Console.ReadKey();
chinput = Convert.ToChar(input);
switch (chinput)
{
case 'x':
{
Console.WriteLine("You pressed x...");
break;
}
case 'y':
{
Console.WriteLine("You pressed y..");
break;
}
case 'd':
{
if (activated != true)
{
Console.WriteLine("Please activate first!");
break;
}
else
{
Console.WriteLine("Active..");
break;
}
}
case 'a':
{
if (activated != true)
{
activated = true;
Console.WriteLine("Activating..");
break;
}
else
{
activated = false;
Console.WriteLine("Deactivating.");
break;
}
}
default:
Console.WriteLine("Unknown Command.");
break;
}
}
}
}
我知道这可能真的错了,但我最初是用Console.ReadLine();在美国,唯一的区别是我想让它在你按下一个键时激活一个功能,而不是必须按回车键或能够输入不同的键。提前感谢!
首先,Convert.ToChar()
不能在ConsoleKeyInfo
结构上工作,所以这就是为什么你有问题,这种转换将抛出异常。
你不需要将你的键转换为字符,相反,你可以打开.Key
属性,这是一个可枚举的,包含每个键:
var input = Console.ReadKey();
switch (input.Key) //Switch on Key enum
{
case ConsoleKey.X:
break;
case ConsoleKey.Y:
break;
}
编辑:- 你也可以使用
input.KeyChar
得到你尝试的第一个字符,然后你可以打开它,如果你想,但它很难打开不同的键,如箭头等。 - 如果您关心字母是大写还是小写,您可以使用
.KeyChar
或使用.Key
与.Modifiers
来检查当用户键入字母 时是否按下了shift键
您可以简单地将输入设置为:
char input=Console.ReadKey().KeyChar;
using Console.ReadKey()返回一个结构体ConsoleKeyInfo的类型。所以你需要从这个类型的变量中接收返回值。然后打开包含所有字符的Key枚举器。
ConsoleKeyInfo chinput = Console.ReadKey();
switch (chinput.Key)
{
case ConsoleKey.X:
{
Console.WriteLine("You pressed x...");
break;
}
case ConsoleKey.Y:
{
Console.WriteLine("You pressed y..");
break;
}
case ConsoleKey.D:
{
if (activated != true)
{
Console.WriteLine("Please activate first!");
break;
}
else
{
Console.WriteLine("Active..");
break;
}
}
case ConsoleKey.A:
{
if (activated != true)
{
activated = true;
Console.WriteLine("Activating..");
break;
}
else
{
activated = false;
Console.WriteLine("Deactivating.");
break;
}
}
default:
Console.WriteLine("Unknown Command.");
break;
}