Допустим, у меня есть метод:
public void DoSomething(ISomeInterface someObject)
{
if(someObject == null) throw new ArgumentNullException("someObject");
someObject.DoThisOrThat();
}
Меня научили считать, что выбрасывание ArgumentNullException
является «правильным», но ошибка «Ссылка на объект не установлена на экземпляр объекта» означает, что у меня есть ошибка.
Зачем?
Я знаю, что если я кеширую ссылку someObject
и использую ее позже, то лучше проверять ее на недействительность, если она передана, и потерпеть неудачу рано. Однако, если я разыменую его в следующей строке, почему мы должны делать проверку? Это будет выбрасывать исключение, так или иначе.
Редактировать :
Это просто пришло мне в голову ... исходит ли страх перед разыменованным нулем от языка, подобного C ++, который не проверяет вас (то есть он просто пытается выполнить какой-то метод в ячейке памяти + смещение метода)?