我希望只允许用户输入字母,这是我到目前为止所尝试的,但是当用户输入数字或其他任何内容时,控制台应用程序就会继续。
static public string Ask(string question)
{
do
{
Console.Write(question);
return Console.ReadLine();
} while (Regex.IsMatch(Console.ReadLine(), @"^[a-zA-Z]+$"));
}
提前谢谢。
答案 0 :(得分:4)
问题是你要返回第一个Console.ReadLine()
的结果,所以你的循环永远不会继续while
子句。
您需要做的是创建一个字符串变量并赋值,然后在您的while子句中检查它:
public static string Ask(string question)
{
string input;
do
{
Console.Write(question);
//Assigns the user input to the 'input' variable
input = Console.ReadLine();
} //Checks if any character is NOT a letter
while (input.Any(x => !char.IsLetter(x)));
//If we are here then 'input' has to be all letters
return input;
}
注意我也在使用Linq的Any()
而不是Regex。对我来说似乎更容易,可能更快(懒得基准测试)。
小提琴here