假设我有一个扩展方法
public static T TakeRandom<T>(this IEnumerable<T> e)
{
...
Run Code Online (Sandbox Code Playgroud)
要验证参数e,我应该:
A)if(e == null)抛出新的NullReferenceException()
B)if(e == null)抛出新的ArgumentNullException("e")
C)不检查e
什么是共识?
我的第一个想法是始终验证参数,因此抛出ArgumentNullException.然后,由于TakeRandom()成为e的方法,也许它应该是NullReferenceException.但是如果它是NullReferenceException,如果我尝试在TakeRandom()中使用e的成员,那么无论如何都会抛出NullReferenceException.
也许我应该使用Reflector达到峰值并找出框架的作用.
最近,我问这个问题,关于这个问题,这是作为封闭的副本,这一个 -因为是这一个我之前.但是,我想在一个角落案例中提出一个更具体的问题,我觉得上述问题都没有,或者他们的答案真的涵盖了:
不真正需要实例的扩展方法应该如何响应空引用?
一个例子(答案是显而易见的)将是.IsNullOrEmpty()(当然应该只返回true一个空引用),但我相信可能还有其他情况,在一个可能为null的对象上调用扩展方法是有意义的.
另一个例子可能是我在其他问题中概述的方法的变体,如果我们一分钟假设foreach循环不会抛出一个空集合(我知道它确实如此,但想象它不仅仅是一个思想实验) .
这里最好的做法是什么?ArgumentNullException无论如何我们应该检查null并抛出,还是取决于案例?如果确实取决于具体情况,我们应该根据什么标准决定该怎么做?