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?

if语句引发异常

这是完全有效的。这正是异常的用途,用来检查逻辑中的"异常",那些本不应该发生的事情

捕获异常背后的想法是,当您将数据传递到某个地方并进行处理时,您可能并不总是知道结果是否有效,也就是说,您想要捕获的时候。

关于你的方法,你不想在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)来表示发生了错误,原因是返回的整数可能被错误地视为方法的有效结果。无论如何,它都是一个整数,并且您的方法在执行其内部逻辑后返回一个整数。因此,该方法的调用方可能会错误地将任何返回的整数视为有效结果,这可能会导致后续的错误。在这种情况下,抛出异常是完全合理的。