c#:int.Parse无法正常工作

时间:2014-03-11 05:37:50

标签: c# try-catch

我在c#中实现了以下方法,以检查用户输入的号码是否是10位数字。它适用于输入数量高达10位的数字。但是,当我输入大于10位的数字时,它打印给定字符串不代表数字而不是联系号码的长度不是10

我知道我可以使用正则表达式匹配来做同样的事情,但我只是想通过使用抛出异常来做到这一点。任何帮助表示赞赏。

    public static bool CheckContactNo(string ContactNo)
    {
        try
        {
            int Number = int.Parse(ContactNo);
            int IsZero = ContactNo.Length == 10 ? 1 : 0;
            //Console.WriteLine("{0}",IsZero);
            int somenum = 1/ IsZero;
            return true;
        }
        catch(DivideByZeroException)
        {
            Console.WriteLine("The length of the Contact No. is not 10");
            return false;
        }

        catch (Exception)
        {
            Console.WriteLine("Given string does not represent a number");
            return false;
        }
    }

5 个答案:

答案 0 :(得分:4)

32位int无法容纳10位完整数字,max value2,147,483,647

换句话说,int.Parse检测到你的int会溢出,并给出错误。

答案 1 :(得分:2)

Int32.MaxValue是2,147,483,647。您将无法解析大于int.maxvalue的数字。

答案 2 :(得分:2)

除了Joachim的答案(解决方案是使用Int64)之外,我也不会使用异常(如DivZero)以这种方式控制流程,而是更喜欢使用TryParse之类的验证确定值是否为数字:

if (contactNo.Length != 10)
{
    Console.WriteLine("The length of the Contact No. is not 10");       
}
else
{
    long contactLong;

    if (Int64.TryParse(ContactNo, out contactLong)
    {
        return true;
    }
    else
    {
        Console.WriteLine("Given string does not represent a number");
    }
}
return false;

答案 3 :(得分:0)

您可以使用Int64代替int

答案 4 :(得分:0)

这个(2,147,483,647)是Int32的最大值,所以int.Parse在内部检查这个 你可以使用Int64.Parse