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
将抛出ArgumentNullException
, FormatException
或OverflowException
。 赔率是你正在寻找的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来通知用户他们需要输入一个数字。