按Enter键时出错,C#控制台

按Enter键时出错,C#控制台,c#,error-handling,key,enter,C#,Error Handling,Key,Enter,我的代码要求用户输入一个字母(将字符串转换为字符),但当按enter键作为输入时,代码崩溃 我没有设置任何条件来向用户发送错误消息,即在输入时不按Enter键,只输入字母 以下是我正在努力解决的问题: public static char GetLetter(string prompt) { char result; Console.Write("\n\t" + prompt + ": "); result = Convert.ToChar(Console.ReadL

我的代码要求用户输入一个字母(将
字符串
转换为
字符
),但当按enter键作为输入时,代码崩溃

我没有设置任何条件来向用户发送错误消息,即在输入时不按Enter键,只输入字母

以下是我正在努力解决的问题:

public static char GetLetter(string prompt)
{
    char result;

    Console.Write("\n\t" + prompt + ":  ");
    result = Convert.ToChar(Console.ReadLine());

    if(result == '!' || result == '@' || result == '#'  || result == '$' || result == '%'  )
    // we can keep going with all the unwanted characters and numbers 
    {
        Console.WriteLine("\n\t NO MATCH ! \n\t ,please try again using letters only , ");
        result = GetLetter(prompt);
        return result;
    }

    return result;
}

Console.ReadLine()
将返回一个
字符串,而不是
char
,请使用
Console.Read
。检查来自MSDN的属性,输入时会出现错误,因为您得到的是空字符串,因此无法将其转换为字符

我建议你这样做:

char result;
string input = Console.ReadLine();

if (char.TryParse(input, out result))
{
    //The input is a char - write your code here.
}

//The input is not a char.

您可以使用
Console.ReadKey()
函数读取字符,如下所示:

public static char GetLetter(string prompt)
{
    char result;

    Console.Write("\n\t" + prompt + ":  ");
    result = Console.ReadKey().KeyChar;

    if (result == '!' || result == '@' || result == '#' || result == '$' || result == '%')
    // we can keep going with all the unwanted characters and numbers 
    {
        Console.WriteLine("\n\t NO MATCH ! \n\t ,please try again using letters only , ");
        result = GetLetter(prompt);
        return result;
    }

    return result;
}

我们需要看到实际的错误,input.Console.ReadKey可以做到,不是吗?@AlexandreTryHardLeblanc,正是我要去的地方;这是更正确的方法,但我仍然对实际的错误和输入有点好奇。啊,当我按下任何字母键时,它给了我结果,我不需要按回车键。这也是一个很好的结果,谢谢。你知道让用户只输入字母的更好方法吗?因为我认为我的代码中包含了所有的| | OR:/你可以使用IsLetter方法,如下所示:
if(char.isleter(result))