одна главная попытка catch в методах вызова методов, которые не реализуют try-catch - PullRequest
5 голосов
/ 12 октября 2010

У меня есть метод doSomething(), в котором есть один блок try catch, внутри которого я вызываю другой метод.

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

    } 

В этом другом методе doSomethingElse() У меня нет блока try catch.Я использую try-catch основного метода для обработки исключения.Если в doSomethingElse() есть какие-либо исключения, они будут добавлены в блок try-catch метода doSomething.

Что-то не так с этим подходом?

Спасибо за ваше время.

Ответы [ 4 ]

5 голосов
/ 12 октября 2010

Это совершенно законно.

Пусть исключения всплывают там, где вы можете / знаете, что с ними делать.

Рекомендуется не засорять ваш код блоками try / catch, которые ничего не добавляют.

Однако иметь пустые блоки catch - это плохая практика (хотя я предполагаю, что код, который вы разместили, является упрощенной версией, в которой код блока catch не используется).

2 голосов
/ 12 октября 2010

Воняет. Для отлова исключения требуется восстановить состояние программы, как если бы doSomethingElse () никогда не вызывался. Это очень сильно зависит от того, что делает метод, но обычно довольно необычно писать метод без каких-либо побочных эффектов. Если есть, то эти побочные эффекты должны быть отменены. Только doSomethingElse () может сделать это, метод doSomething () не в состоянии угадать, сколько из этих побочных эффектов было фактически выполнено. И, таким образом, не может надежно восстановить состояние.

Это особенно актуально, когда вы ловите все исключения. Вы также возьмете противных. Как AccessViolation или FatalExecutionEngineError, исключения, которые оставляют сам CLR в неизвестном состоянии, вы никогда не сможете восстановить это. Что будет дальше, совершенно непредсказуемо. Вы получите множество дополнительных исключений, только если вам повезет. Диагностировать их невозможно, вы выбросили ценную информацию.

2 голосов
/ 12 октября 2010

В этом нет ничего плохого.

Как уже говорили другие, не глотайте исключения. Также может быть хорошей идеей не создавать исключение new ; скорее просто catch (Exception) и throw это. Конечно, также следует отметить, чтобы попытаться быть конкретными с исключениями, а не просто использовать значение по умолчанию Exception.

1 голос
/ 12 октября 2010

Это ок , но вы забыли о ; после doSomethingElse()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...