我正在用C#编写一个程序,我想捕获转换引起的异常“”(null) 到int。什么是例外的名字?
修改 我不确定我能在这里显示完整代码...... 但我确定你不需要完整的代码,所以:
int num1 = Int32.Parse(number1.Text);
int num2 = Int32.Parse(number2.Text);
答案 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
会抛出ArgumentNullException
,FormatException
或OverflowException
。赔率是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来通知用户他们需要输入一个数字。