C# - 解析异常失败?

时间:2010-07-29 20:30:40

标签: c# .net

我正在用C#编写一个程序,我想捕获转换引起的异常“”(null) 到int。什么是例外的名字?

修改 我不确定我能在这里显示完整代码...... 但我确定你不需要完整的代码,所以:

        int num1 = Int32.Parse(number1.Text);
        int num2 = Int32.Parse(number2.Text);

10 个答案:

答案 0 :(得分:31)

如果可以避免,请不要异常编码!

您要查找的例外名称为FormatException

但是,首先对您尝试解析的对象执行TryParse会更明智,例如。

int value;
if(!int.TryParse("1", out value))
{
    // You caught it without throwing an exception.
}

答案 1 :(得分:13)

如果解析失败,您将获得FormatException。为什么不使用int.TryParse

答案 2 :(得分:10)

作为旁注,找出异常的一种简单方法是运行它。当您遇到错误时,它会为您提供例外名称。

答案 3 :(得分:6)

让我们来看看at the documentation(这是一个更“干净利落”的解决方案):

  

public static int Parse(string s)

     

[...]

     

例外:

     
      
  • ArgumentNullException:s为空。
  •   
  • FormatException:s的格式不正确。
  •   

这应该回答你的问题。正如其他人已经提到的那样,也许你提出了错误的问题并希望改用Int32.TryParse

答案 4 :(得分:1)

取决于您用于转换的内容。例如,int.Parse会抛出ArgumentNullExceptionFormatExceptionOverflowException。赔率是ArgumentNullException你正在寻找,但如果这是一个空字符串而不是空引用,它可能会是FormatException

答案 5 :(得分:0)

当异常触发时,您可以看到它的类型。聪明的做法是处理这种情况,并在可能的情况下向用户显示优雅的信息。

答案 6 :(得分:0)

您可能希望获得System.InvalidCastException,但我认为这取决于您尝试执行转换的方式。

那就是说,简单地编写代码并自己尝试一下会不会更快/更容易?特别是因为您尚未指定 ,您将执行转换。

答案 7 :(得分:0)

试试吧。这段代码:

int.Parse("");

抛出FormatException。

答案 8 :(得分:0)

例外是昂贵的。你应该使用int.TryParse。如果转换失败,它将返回布尔值false。

答案 9 :(得分:0)

Convert.ToInt32不会在空字符串上抛出格式异常(“输入字符串格式不正确”)。如果结果对于空字符串为0,则可以使用它。 (虽然仍然在空弦上呕吐)

        string s = null;
        int i = Convert.ToInt32(s);

但是如果您希望框中有一个数字,您应该使用TryParse(如建议的那样)或某种类型的Validator来通知用户他们需要输入一个数字。