我在这里尝试实现的是,当您按“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
{
}
}
}
}
答案 0 :(得分:1)
您目前得到的错误是因为您忘记了:
=和==不是一回事。第一个是作业,第二个是比较。
您无法将string
分配给ConsoleKeyInfo
,反之亦然,肯定不会分配到if语句中。即使您已修复此问题,仍然无法将string
与ConsoleKeyInfo
进行比较。您可以获取其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键时输入的不可见字符。