if语句引发异常
本文关键字:异常 语句 if | 更新日期: 2023-09-27 17:57:57
嗨,我想问一下,因为我不确定使用Exception:是否合适
public int Method(int a, int b) {
if(a<b) throw new ArgumentException("the first argument cannot be less than the second");
//do stuff...
}
我可以在if语句后抛出Exception吗?还是应该在出现异常时始终使用try-catch?
这是完全有效的。这正是异常的用途,用来检查逻辑中的"异常",那些本不应该发生的事情
捕获异常背后的想法是,当您将数据传递到某个地方并进行处理时,您可能并不总是知道结果是否有效,也就是说,您想要捕获的时候。
关于你的方法,你不想在Method
内部捕获,但实际上当你调用它时,这里有一个例子:
try
{
var a = 10;
var b = 100;
var result = Method(a, b);
}
catch(ArgumentException ex)
{
// Report this back to the user interface in a nice way
}
在上面的情况下,a小于b,所以你可以在这里得到一个异常,并且你可以相应地处理它。
在这种情况下,您不想捕获异常。你抛出它是为了提醒调用者,他们在调用你的方法时犯了错误。你自己去抓它可以防止这种情况发生。是的,你的代码看起来不错。
这很好。您正在抛出异常,而不是捕获/处理它,因此不需要try/catch
块。
这是完全有效的,即使与构造函数一起使用,也可以使用相同的构造。但是您不应该做的是
public int Method(int a, int b)
{
try
{
if (a < b)
throw new ArgumentException("the first argument cannot be less than the second");
}
catch (Exception)
{
}
return 0;
}
你的想法是对的。你可以这样使用你的代码:
void MyMainMethod()
{
// ... oh, let's call my Method with some arguments
// I'm not sure if it'll work, so best to wrap it in a try catch
try
{
Method(-100, 500);
}
catch (ArgumentException ex)
{
Console.WriteLine(ex.Message);
}
}
public int Method(int a, int b)
{
if (a < b) throw new ArgumentException("the first argument cannot be less than the second");
//do stuff ... and return
}
浏览MSDN的处理和抛出异常以及处理异常的最佳实践
您在这里所做的一切都很好。
arg检查的一种常见模式是将检查/抛出代码封装在静态"Contract"类中,以确保在验证输入参数时具有一致的异常管理方法。
稍微偏离主题,但如果使用.NET 4.0,您还可以查看用于验证方法输入和输出的新代码契约功能。
以上所有答案都是正确的,但我想在这里提到一点,我在任何答案中都没有提到。您应该抛出异常而不返回整数(例如0或-1)来表示发生了错误,原因是返回的整数可能被错误地视为方法的有效结果。无论如何,它都是一个整数,并且您的方法在执行其内部逻辑后返回一个整数。因此,该方法的调用方可能会错误地将任何返回的整数视为有效结果,这可能会导致后续的错误。在这种情况下,抛出异常是完全合理的。