如果声明抛出异常?

时间:2011-05-31 08:11:02

标签: c# exception exception-handling

您好我想问,因为我不确定它是否属于使用例外:

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语句后抛出异常吗?或者我应该总是使用try-catch,除非有例外吗?

6 个答案:

答案 0 :(得分:24)

这完全有效。这正是用于检查逻辑中的“异常”的异常,这些异常并不是假设的。

捕获异常背后的想法是,当您在某处传递数据并对其进行处理时,您可能并不总是知道结果是否有效,即您想捕获的时间。

关于你的方法,你不想在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,所以你可以在这里得到一个例外,你可以相应地处理它。

答案 1 :(得分:10)

在这种情况下,您不希望捕获异常。你扔掉它是为了提醒来电者他们调用你的方法时犯了错误。自己捕捉它可以防止这种情况发生。所以是的,你的代码看起来很好。

答案 2 :(得分:8)

这很好。您抛出异常,而不是捕获/处理它,因此您不需要try/catch块。

答案 3 :(得分:6)

这完全有效,即使使用构造函数,也可以使用相同的构造。 但是不应该做什么

   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;

    }

答案 4 :(得分:3)

你有正确的想法。您可以像这样使用您的代码:

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's Handling and Throwing ExceptionsBest Practices for Handling Exceptions

可能会有所帮助

答案 5 :(得分:1)

你在这里所做的完全没问题。

arg检查的一个常见模式是将check / throw代码包装在一个静态的“Contract”类中,以确保在验证输入参数时有一致的异常管理方法。

稍微偏离主题但是如果使用.NET 4.0,您还可以查看新的Code Contracts功能以验证方法输入和输出。