Console.ReadKey();和Switch语句 - 使用字母

时间:2011-08-08 23:04:34

标签: c# switch-statement

我正在尝试使用Console.ReadKey()在C#中创建基本上基于用户按下的键(例如X = Quit,D = Disconnect等;)的函数;在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()开始的; ,唯一的区别是我希望它在您按一个键时激活一个功能,而不是必须按Enter键或能够输入不同的键。提前谢谢!

3 个答案:

答案 0 :(得分:21)

首先,Convert.ToChar()不适用于ConsoleKeyInfo结构,因此这就是您遇到问题的原因,此转换将引发异常。

您不必将密钥转换为字符,而是可以打开.Key属性,这是一个包含每个密钥的枚举:

var input = Console.ReadKey();

switch (input.Key) //Switch on Key enum
{
    case ConsoleKey.X:
        break;
    case ConsoleKey.Y:
        break;
}

编辑:

  1. 您也可以使用input.KeyChar获取您先尝试的内容 - 字符,然后您可以根据需要打开它,但是很难打开不同的键,如箭头等。
  2. 如果您关心字母是大写/小写,您可以使用.KeyChar.Key.Modifiers一起检查用户输入字母时是否按下了shift键

答案 1 :(得分:12)

您可以简单地将输入视为:

char input=Console.ReadKey().KeyChar;

答案 2 :(得分:1)

使用Console.ReadKey()返回一个struct ConsoleKeyInfo的类型。所以你需要从这种类型的变量中收到回报。 然后打开Key enumrator,它包含所有字符。

 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;
        }