相关疑难解决方法(0)

C#:在扩展方法中验证"this"参数的最佳实践

假设我有一个扩展方法

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达到峰值并找出框架的作用.

c# extension-methods exception argument-validation

6
推荐指数
1
解决办法
2722
查看次数

Null检查不需要实例的扩展方法?

最近,我问这个问题,关于这个问题,这是作为封闭的副本,这一个 -因为是这一个我之前.但是,我想在一个角落案例中提出一个更具体的问题,我觉得上述问题都没有,或者他们的答案真的涵盖了:

不真正需要实例的扩展方法应该如何响应空引用?

一个例子(答案是显而易见的)将是.IsNullOrEmpty()(当然应该只返回true一个空引用),但我相信可能还有其他情况,在一个可能为null的对象上调用扩展方法是有意义的.

另一个例子可能是我在其他问题中概述的方法的变体,如果我们一分钟假设foreach循环不会抛出一个空集合(我知道它确实如此,但想象它不仅仅是一个思想实验) .

这里最好的做法是什么?ArgumentNullException无论如何我们应该检查null并抛出,还是取决于案例?如果确实取决于具体情况,我们应该根据什么标准决定该怎么做?

c# null extension-methods

1
推荐指数
1
解决办法
963
查看次数