C# – 解析exception失败?

我正在用C#编写程序,我想捕获将“”(null)转换为int所引起的exception。 什么是例外的名字?

编辑:我不确定我可以在这里显示完整的代码…但我确定你不需要完整的代码,所以:

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

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

您要查找的exception名称称为FormatException

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

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

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

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

让我们来看看文档 (这是一个更“干净”的解决方案,“尝试一下”):

public static int Parse(string s)

[…]

例外:

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

这应该回答你的问题。 正如其他人已经提到的那样,也许你问的是错误的问题并且想要使用Int32.TryParse 。

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

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

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

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

就试一试吧。 这段代码:

 int.Parse(""); 

抛出FormatException。

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

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

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

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