ловить исключения C # - PullRequest
       0

ловить исключения C #

4 голосов
/ 18 октября 2010

Как правильно поступить.

Чтобы перехватить исключения из наиболее специфичных для наиболее общих или противоположных.

, если я напишу

try
{
...
}
catch( Exception e )
{
...
}
catch( NullReferenceException nre )
{
...
}

Будет ли NullReferenceException nre когда-либобыть пойманным?

Ответы [ 9 ]

14 голосов
/ 18 октября 2010
try
{
...
}
catch( NullReferenceException nre )
{
...
}
catch( Exception e )
{
...
}

Кроме того, я бы не поймал NullReferenceException, я бы проверил, является ли значение, к которому я пытаюсь получить доступ, не нулевым, прежде чем на самом деле получить к нему доступ, или использовал бы оператор null coalescing (??) чтобы это исключение никогда не происходило

Следует избегать ловли генерала Exception.ИМХО, вы должны делать это только в каком-то глобальном обработчике исключений, потому что вы редко можете обрабатывать случай всех возможных исключений каждый раз, когда вызываете метод.В этом случае вы должны отлавливать только некоторые конкретные исключения и предпринимать надлежащие действия.

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

Нет, вам нужно перейти от самого конкретного к наиболее общему. Ваш пример должен выглядеть как

try
{

}
catch(NullReferenceException nre)
{

}
catch(Exception e)
{

}

см. здесь (MSDN)

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

Блок try может выдавать несколько исключений, которые могут обрабатываться с помощью нескольких блоков catch.Помните, что более специализированный блок catch должен предшествовать обобщенному.В противном случае компилятор покажет ошибку компиляции.

Источник

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

наиболее производные для менее производных

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

Нет. Вы должны ловить исключения из наиболее специфичных для общего.

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

Нет, не будет.

Это происходит в том порядке, в котором вы его разместили.Поместите наиболее конкретные исключения вверху, а общие внизу.

http://msdn.microsoft.com/en-us/library/0yd65esw.aspx

0 голосов
/ 18 октября 2010

конечно, это от самого специфического к общему.

try {
   ...
} catch (IOException ex) {
  ....
} catch (Exception ex) {
   ...
}
0 голосов
/ 18 октября 2010

Чтобы быть пойманным, NullReferenceException должен быть первым в списке вылова.

try {
    ...
} catch (NullReferenceException ex) {
    ....
} catch (Exception ex) {
    ...
}

Это указывает, что вы хотите обрабатывать NullReferenceException особым образом, с которым у вас есть что-то конкретное. Затем, позволяя другим типам исключений попадать в самый общий улов. С другой стороны, следует избегать неспецифической обработки исключений, поскольку эта статья MSDN предлагает: Exception Handling.

Кроме того, лучше проверить, является ли объект, к которому осуществляется доступ, нулевым (Ничто в Visual Basic), прежде чем пытаться получить к нему доступ, вместо того, чтобы позволить коду обращаться к объекту и выдавать это исключение, когда оно нулевое. Вот полезная ссылка по этому вопросу: Exception Handling Best Practices in .NET.

0 голосов
/ 18 октября 2010

Наиболее конкретный первый

Будет ли когда-либо обнаруживаться исключение NullReferenceException?

true

нет, не будетбыть пойманным

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