如何捕获无效数据输入的异常?

时间:2013-05-17 00:39:33

标签: c# visual-c#-express-2010

我希望在最终用户输入无效格式时留下异常,或者在不输入任何数据的情况下离开该字段。我使用字符串类型作为第一个名称和姓氏。这是问题,因为字符串类型接受字符串类型数据和数字数据catch块无法捕获无效数据输入的异常。因为字符串类型的默认值为null,所以当字段为空时无法捕获异常。

例如,我希望在用户在fname字段中键入123或在不输入数据的情况下离开字段时捕获异常。

     static void Main(string[] args)
    {
        string fName = null;
        string lName = null;

        try
        {             

            Console.Write("Enter your first Name  ");
            fName = Console.ReadLine();

            Console.Write("Enter your Last Name  ");
            lName = Console.ReadLine();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            Console.WriteLine("Please enter correct format");
        }

     }

3 个答案:

答案 0 :(得分:1)

你真的不需要try-catch块。由于您已捕获局部变量中的字段,因此您可以对它们执行验证。

if (String.IsNullOrEmpty(fName)) {
  // handle empty string input
}

if (ContainsNumbers(fName)) {
  // handle invalid input
}

private bool ContainsNumbers(string str) {
  ...
}

答案 1 :(得分:0)

"123""abc"一样有效。您想要检查用户输入的内容是否只包含单词字符。你会这样做:

Regex regex = new Regex("(\w+)");
fname = Console.ReadLine();
if (!regex.Match(fname).Success)
{
    // throw exception here, as the entered value did not contain word characters.
}

答案 2 :(得分:0)

您需要手动验证条目,然后抛出异常。

但是......你真的不应该使用Exceptions进行数据验证,当出现不期望的事情时会使用Exception ....比如网络错误,db错误等......

对于数据验证,一个简单的IF语句就足够了。

希望它有所帮助。