【问题标题】:How to handle int exception?如何处理int异常?
【发布时间】:2014-01-03 20:42:28
【问题描述】:

我正在尝试处理输入字符串而不是 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 的最后一个条件不正确,但我没有想法。

【问题讨论】:

  • Int32.TryParse 是你所需要的
  • 有多种方法可以处理异常和验证 - 您需要绝对清楚您的条件是什么,以及您正在使用什么技术,然后我们才能真正提供帮助。
  • 请注意,将电话号码表示为整数通常不是最佳解决方案。在特殊情况下,您可能需要特殊字符,例如 +、# 或 *,并且前导零可能很重要。
  • 32 位整数是否足以满足您的需求?我在您的个人资料上看不到语言环境,但它不足以容纳美国或英国的电话号码,而且如果以国际国家代码为前缀,肯定不会容纳大多数号码。
  • 旁注:不要尝试将电话号码保存为整数,这是个坏主意。在大多数情况下,字符串应该没问题。无论如何,您不太可能需要数值。

标签: c# exception-handling


【解决方案1】:
string text1 = "x";
int num1;
if (!int.TryParse(text1, out num1))
{
    // String is not a number.
}

【讨论】:

    【解决方案2】:

    您需要先使用 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;
    

    显然,我刚刚复制了您在示例中指定的验证逻辑,但它似乎有点简单,并且可能会丢弃完全有效的电话号码。

    【讨论】:

      【解决方案3】:

      如果您使用的是原始数据,您可以使用前面提到的 int.TryParse()。

      但是,如果您尝试验证更复杂的规则,您可能想要使用 FluentValidation nuget 包之类的东西,我非常喜欢它。它使验证成为一种更愉快的体验:)

      http://fluentvalidation.codeplex.com/

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

      【讨论】:

        【解决方案4】:
            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());
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-11
          • 2013-08-02
          • 2019-04-25
          相关资源
          最近更新 更多