如何处理int异常?

时间:2014-01-03 12:35:05

标签: c# exception-handling

我正在尝试处理输入字符串而不是int的情况。 例如

newCustomer.PhoneNum = Convert.ToInt32(Console.ReadLine());
if (newCustomer.PhoneNum < 0 || newCustomer.PhoneNum > 10000000000 || newCustomer.PhoneNum.GetType() != typeof (int))
{
    throw new CustomException(newCustomer.PhoneNum.ToString());
}

显然,if的最后一个条件是不对的,但我没有想法。

4 个答案:

答案 0 :(得分:2)

string text1 = "x";
int num1;
if (!int.TryParse(text1, out num1))
{
    // String is not a number.
}

答案 1 :(得分:1)

您需要先使用int.TryParse检查输入的内容,如果它是有效整数,则将值放入out参数,否则返回false。

int phoneNumber;
string input = Console.ReadLine();

if (!int.TryParse(input, out phoneNumber))
{
    throw new CustomException(input);
}
else if (phoneNumber < 0 || phoneNumber > 10000000000
{
    throw new CustomException(phoneNumber);
}

newCustomer.PhoneNum = phoneNumber;

显然我刚刚复制了你在你的例子中指定的验证逻辑,但它看起来有点简单,可能会丢掉完全有效的电话号码。

答案 2 :(得分:0)

如果你正在使用原始数据,你可以使用已经提到的int.TryParse()。

但是,如果您尝试验证更复杂的规则,您可能希望使用类似FluentValidation nuget包的内容,我非常喜欢。它使验证成为一种更令人愉快的体验:)

http://fluentvalidation.codeplex.com/

或者,如果您使用的是ASP.Net或MVC,则内置验证引擎。在MVC中,您可以使用模型数据注释来非常轻松地(并以有组织的方式)进行客户端和服务器端验证。查看unobtrusive validation

答案 3 :(得分:0)

    int i;
    string n=textbox1.Text;
    bool success = int.TryParse(n, out i);

//if the parse was successful, success is true

    if(success)
    {
    //do ur code

    }
    else
    {

     throw new CustomException(newCustomer.PhoneNum.ToString());
    }