Исключение ловли - PullRequest
       1

Исключение ловли

1 голос
/ 24 августа 2010

В чем разница между

 try
 {
     ... 
 }
 catch (NHibernate.ADOException exception)
 {}

и

try
{
    ... 
}
catch (exception ex)
{}

Ответы [ 3 ]

6 голосов
/ 24 августа 2010

В блоке catch вы указываете, какие исключения вы хотите перехватить. Так что если у вас есть

try {}
catch(Exception e){}

он будет перехватывать все исключения, которые происходят из класса Exception (то есть ВСЕ исключения). Если у вас есть:

try{}
catch (NHibernate.ADOException exception){}

он будет перехватывать только те исключения, которые являются производными от ADOException. Поэтому, если вы получите ArgumentException, оно пройдет, как если бы не было try / catch.

1 голос
/ 24 августа 2010

Полагаю, вы имели в виду

catch (Exception ex) {}

со вторым фрагментом.

Тогда разница в том, что первый будет ловить только один конкретный тип исключения, а именно NHibernate.ADOException, тогда как второй будет входить в блок catch для всех исключений, которые могут быть выброшены.

Второе - обычно плохая практика, поскольку вы утверждаете, что обрабатываете все возможные типы ошибок. Тем не менее, это может иметь смысл в самой внешней области видимости в качестве всеобъемлющего для любого исключения, которое прошло.

0 голосов
/ 24 августа 2010

Использование catch {Exception} настоятельно не рекомендуется, потому что это на самом деле скрывает ошибки. В любом месте, где может возникать исключение, необходимо перехватывать только ожидаемые типы исключений, даже если для этого требуется написать больше строк кода. При возникновении непредвиденного исключения программа должна завершиться сбоем, это единственный способ исправить ошибку.

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