Rob*_*son 15
对null进行测试永远不会*抛出异常
void DoSomething( MyClass value )
{
if( value != null )
{
value.Method();
}
}
Run Code Online (Sandbox Code Playgroud)
*绝不应该永远.正如@Ilya Ryzhenkov指出的那样,MyClass的!=运算符的错误实现可能会引发异常.幸运的是,Greg Beech有一篇关于在.NET中实现对象相等性的博文.
Robert说的是什么,但是对于那个特例,我喜欢用这样的保护子句表达它,而不是将整个方法体嵌套在if块中:
void DoSomething( MyClass value )
{
if ( value == null ) return;
// I might throw an ArgumentNullException here, instead
value.Method();
}
Run Code Online (Sandbox Code Playgroud)
注意,在MyClass上定义运算符!=可能会导致检查结果不同,以及稍后会发生NullReferenceException.要绝对确定,请使用object.ReferenceEquals(value,null)