Когда мне следует использовать метод ThrowHelper вместо прямого вызова?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Когда мне следует использовать метод ThrowHelper вместо прямого вызова?

Сообщение Anonymous »

Когда уместно использовать метод ThrowHelper вместо прямого вызова?

void MyMethod() {
...
//throw new ArgumentNullException("paramName");
ThrowArgumentNullException("paramName");
...
}
void ThrowArgumentNullException(string paramName) {
throw new ArgumentNullException(paramName);
}


Я читал, что вызывается метод ThrowHelper (метод, единственной целью которого является создание исключения) вместо непосредственного вызова должен давать меньший байт-код.

Это, а также очевидная инкапсуляция (еще один уровень косвенности) могут быть вескими причинами не выполнять прямой вызов, по крайней мере, в некоторых сценариях.

В любом случае, по моему мнению, недостатки тоже не являются несущественными.
  • Часть (исключительного) потока управления скрыта
  • Исключения в конечном итоге имеют более загадочную трассировку стека
  • компилятор (2.0) не распознает, что вызовы ThrowHelper являются точками выхода из метода, поэтому требуется некоторый обход кода необходимо.
По моему ограниченному опыту, общий дизайн зачастую ухудшается.

int MyMethod(int i) {
switch (i) {
case 1:
return 1;
default:
ThrowMyException();
}
return 0; // Unreachable (but needed) code
}


Отчасти это может быть вопросом личного вкуса. В любом случае, каковы ваши личные рекомендации по этому вопросу? Считаете ли вы хорошей идеей использовать ThrowHelpers для всех таких распространенных задач, как проверка параметров метода (ThrowArgumentNullException(paramName) и тому подобное)?
Я пропустил что-то очевидное по этой проблеме?

Кстати, я стараюсь не смешивать эту проблему с проблемой проверки, например. такой метод:

ThrowIfNameIsNullOrEmpty(name);


Подробнее здесь: https://stackoverflow.com/questions/198 ... g-directly
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»