假设我有一个方法:
public void DoSomething(ISomeInterface someObject)
{
if(someObject == null) throw new ArgumentNullException("someObject");
someObject.DoThisOrThat();
}
我受过训练,相信抛出的错误ArgumentNullException
是“正确的”,但是“对象引用未设置为对象的实例”错误意味着我有一个错误。
为什么?
我知道,如果我要缓存对引用的引用someObject
并在以后使用它,那么最好在传入时检查是否为空,并尽早失败。但是,如果我在下一行取消引用,为什么要进行检查?它将以一种方式或另一种方式引发异常。
编辑:
这只是我想到的...担心被取消引用的null是否来自不检查您的C ++之类的语言(即,它只是尝试在内存位置0 +方法偏移处执行某些方法)?