无法将system.consolekeyinfo转换为字符串

时间:2015-08-21 00:36:28

标签: c#

我在这里尝试实现的是,当您按“1”时,它将检查“code_1”,然后如果匹配则会说“key1 correct”,然后检查其他代码。但是编译器说

  

无法将system.consolekeyinfo转换为字符串

所以我想知道我是如何解决这个问题的。这是我使用的代码:

    static void Main(string[] args)
    {
        string first_time = null;
        string paktc = "Press any key to continue . . .\r\n";
        string code_1 = "1";
        string code_2 = "2";
        string code_3 = "3";
        string code_4 = "4";
        if (first_time == null)
        {
            Console.WriteLine("\r\nYour code is 1234\r\n");
            Console.WriteLine(paktc);
            Console.ReadKey();
            Console.WriteLine("Insert Code Now\r\n");

            ConsoleKeyInfo key1 = Console.ReadKey();
            if (code_1 = key1)
            {
                ConsoleKeyInfo key2 = Console.ReadKey();
                if (code_2 = key2)
                {
                    ConsoleKeyInfo key3 = Console.ReadKey();
                    if (code_3 = key3)
                    {
                        Console.WriteLine("Key3 Correct\r\n");
                        ConsoleKeyInfo key4 = Console.ReadKey();
                        if (code_4 = key4)
                        {
                            Console.WriteLine("Key4 Correct\r\n");
                            Console.ReadKey();
                            Console.WriteLine(paktc);
                        }
                        else
                        {

                        }
                    }
                    else
                    {

                    }
                }
                else
                {

                }
            }
            else
            {

            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您目前得到的错误是因为您忘记了:

  

=和==不是一回事。第一个是作业,第二个是比较。

您无法将string分配给ConsoleKeyInfo,反之亦然,肯定不会分配到if语句中。即使您已修复此问题,仍然无法将stringConsoleKeyInfo进行比较。您可以获取其KeyChar属性,并将其与char进行比较:

if (keyInfo.KeyChar == myString[0])

有效(因为string可以编入索引以获取其char s)。在您的情况下,您可以使用char并使其更简单:

if (keyInfo.KeyChar == '1')

答案 1 :(得分:0)

使用Console.Read();代替,它会返回一个int,可以将其转换为char。此外,您可以拥有一个包含完整代码的字符串,并将其用作数组,而不是包含4个字符串,其中包含一个字符,请参阅下面的示例

    static void Main(string[] args)
    {
        string pw = "123";
        Console.WriteLine("Enter the first digit of the password");
        char toTest = (char) Console.Read();
        Console.Read();
        Console.Read();
        if (toTest == pw[0])
        {
            Console.WriteLine("Enter the second digit of the password");
            toTest = (char)Console.Read();
            Console.Read();
            Console.Read();
            if (toTest == pw[1])
            {
                Console.WriteLine("Enter the third digit of the password");
                toTest = (char)Console.Read();
                Console.Read();
                Console.Read();
            }
        }
    }

额外的Console.Read();命令用于捕获按Enter键时输入的不可见字符。