C#处理无效的用户输入

时间:2010-04-25 15:04:18

标签: c# user-input

有一个简单的控制台应用程序,要求用户输入多个值。输入通过console.readline()读取。实施例

Name: Fred  //string
Lastname: Ashcloud //string
Age: 28 //int

我想确保输入int和double类型,如果用户输入垃圾,请让他重复该过程。

例如,如果用户输入年龄为期望的“28岁”,则应用程序将崩溃。检查这些输入的最佳方法是什么?

现在我只能想到:

while (!Int32.TryParse(text, out number))
{
    Console.WriteLine("Error write only numbers");
    text = Console.ReadLine();
}

还有其他办法吗?如果想要向用户提供更详细的反馈,请尝试捕获语句?在那种情况下如何?

4 个答案:

答案 0 :(得分:2)

对于控制台应用程序,您的代码非常好。

但是,您可能希望将其抽象为可重用的函数,以便您可以在不重复代码的情况下读取不同的数字。

此外,您可能希望为用户提供某种取消方式。

答案 1 :(得分:1)

using System.Text.RegularExpressions;

int GetNumberFromString( string str_age )
{
     Regex number = new Regex("[0-9][0-9]?");
     Match n = number.Match(str_age);
     if (n.Value != "")
         return System.Convert.ToInt16(n.Value, 10);
     else
         return -1;            
}

这将解析除年龄之外的任何数据,如果没有年龄,则返回-1。 这也假设年龄为0-99岁。

答案 2 :(得分:1)

正则表达式很好。

Regex age = new Regex(@"^[0-9]*$");
while (!age.match(age_from_console)) {
    Console.WriteLine("Age Invalid, try again ->");
}

答案 3 :(得分:1)

实际上,你的代码很好。我会添加负数检查,也许还有大量检查。