【问题标题】:Console.ReadKey(); and Switch statement - using lettersConsole.ReadKey();和 Switch 语句 - 使用字母
【发布时间】:2011-08-08 23:04:33
【问题描述】:

我正在尝试使用 C# 编写一个程序,该程序基本上基于用户按下的键(例如 X = 退出、D = 断开连接等;)通过使用 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(); 开始的。 ,唯一的区别是我希望它在您按下单个键时激活一个功能,而不是必须按回车键或能够输入不同的键。提前致谢!

【问题讨论】:

    标签: c# switch-statement


    【解决方案1】:

    首先,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 键

    【讨论】:

      【解决方案2】:

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

      char input=Console.ReadKey().KeyChar;
      

      【讨论】:

      • 谢谢,这正是我想要的!
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-02
        • 1970-01-01
        • 2019-11-21
        • 2015-12-05
        • 1970-01-01
        相关资源
        最近更新 更多