一个主要尝试catch方法调用没有实现try-catch的方法

时间:2010-10-12 12:05:04

标签: c# exception exception-handling

我有一个方法doSomething(),它有一个try catch块,我在其中调用另一个方法。

    public void doSomething()  
    {  
       try
        {
            doSomethingElse();
        }
        catch
        {
            // catch implementation goes here
        }

    } 

在另一个方法doSomethingElse()中我没有任何try catch块。我依靠main方法的try-catch来处理异常。如果doSomethingElse()中有任何例外,它们将被冒泡到方法doSomething的try-catch块。

这种方法有什么问题吗?

感谢您的时间。

4 个答案:

答案 0 :(得分:5)

这是完全合法的。

让异常冒泡到你可以知道如何处理它们。

最好不要使用不添加任何内容的try / catch块来丢弃代码。

但是,使用空的catch块不好的做法(尽管我假设您发布的代码是省略catch块代码的简化版本。)

答案 1 :(得分:2)

没错。

正如其他人所说,不要吞下例外。抛出 new 异常也是一个好主意;相反,它只是catch (Exception)throw。当然,还应该注意尝试并特定于异常,而不仅仅使用默认的Exception

答案 2 :(得分:2)

很臭。捕获异常需要您恢复程序状态,就好像从未调用过doSomethingElse()一样。这在很大程度上取决于方法的作用,但编写一个没有任何副作用的方法通常是很不寻常的。如果有,则需要取消这些副作用。只有doSomethingElse()可以这样做,doSomething()方法无法猜测实际执行了多少副作用。因而无法可靠地恢复状态。

当您捕获所有异常时尤其如此。你也会抓住那些讨厌的人。与AccessViolation或FatalExecutionEngineError类似,使CLR本身处于未知状态的异常,您永远无法恢复它。接下来发生的事情是非常不可预测的。只有幸运的话,你才会得到一些额外的例外。诊断它们是不可能的,你扔掉了有价值的信息。

答案 3 :(得分:1)

这是确定,但在;

之后忘了doSomethingElse()