c # Почему бы не бросить ArgumentNullException? - PullRequest
0 голосов
/ 17 октября 2011

Я просто читал здесь , что я не должен выбрасывать ArgumentNullException из своего собственного исходного кода. Почему это?

Если у меня есть метод, который не следует передавать null, почему бы не проверить параметр и не выдать его, если он действительно равен нулю?

public void DoStuff(List<Int32> list)   // Shouldn't be null.
{
   if(list == null)   // If input is null...
      throw new ArgumentNullException();

   ...
}

Спасибо.

Ответы [ 5 ]

6 голосов
/ 17 октября 2011

Эта ссылка не говорит ничего подобного (я не могу найти ArgumentNullException, упомянутый на этой странице). В нем говорится, что не следует генерировать исключение NullReferenceException, которое является совершенно другим исключением и на самом деле не должно вызываться из вашего собственного кода (у вас нет причин для этого).

Я все время выкидываю ArgumentNullException из своего собственного кода, как и .NET Framework при проверке параметров.

3 голосов
/ 17 октября 2011

Нет ничего плохого в том, чтобы выдавать ArgumentNullException, это хорошая практика.

В статье говорится о System.Exception, System.SystemException, System.NullReferenceException или System.IndexOutOfRangeException

3 голосов
/ 17 октября 2011

Конечно, вы должны.Событие по вашей собственной ссылке имеет этот пример в качестве первого.Если метод общедоступен, вы должны всегда проверять достоверность параметра.

Ссылка говорит только об исключении NullReferenceException, и это происходит только при попытке доступа к методу нулевого ссылочного объекта.Правильно не генерировать исключения NullReferenceException, поскольку они генерируются только во время выполнения.

1 голос
/ 17 октября 2011

Если можно использовать значение по умолчанию для нулевого параметра, и если значение по умолчанию четко задокументировано, то, возможно, стоит рассмотреть этот вариант.

Однако вы всегда должны проверять любыепараметры в публичном методе.Не доверяйте другим разработчикам знать, что они делают.Любые исключения, выданные в результате неверного аргумента, должны наследоваться от ArgumentException класса.

1 голос
/ 17 октября 2011

Потому что если вы выбросите * NullReferenceException *, это означает, что вы ожидали, что один из объектов может иметь нулевую ссылку на себя. Было бы лучше справиться с этой проблемой, запрограммировав логику в свой код, а не полагаться на исключение для ее обработки.

Исключения не должны использоваться для изменения потока программы как части обычного выполнения. Они должны использоваться только для сообщения и обработки ошибок.

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