假设我有这个扩展方法:
public static bool HasFive<T>(this IEnumerable<T> subjects)
{
if(subjects == null)
throw new ArgumentNullException("subjects");
return subjects.Count() == 5;
}
你认为这个空值检查和异常抛出真的有必要吗?我的意思是,当我使用Count
方法时,ArgumentNullException
仍然会被抛出,对吧?
我可以想到一个原因为什么我应该这样做,但只是想听听别人的看法。是的,我提出问题的原因部分是懒惰(想尽可能少地编写代码),但也因为我觉得一堆空值检查和异常抛出会使方法变得凌乱,通常会比实际需要的长两倍。有些人应该知道不应该向方法中发送null :p
无论如何,你们怎么看?
注意:`Count()` 是一个扩展方法,会抛出 `ArgumentNullException` 而不是 `NullReferenceException`。请参见
Enumerable.Count<TSource> Method (IEnumerable<TSource>)
。如果你不相信,请自行尝试 =)
注意2: 在这里给出的答案后,我被说服开始更多地检查空值。虽然我仍然很懒,但我已经开始使用Lokad Shared Libraries中的Enforce
类。可以推荐看一下它。与我的示例不同,我可以这样做:
public static bool HasFive<T>(this IEnumerable<T> subjects)
{
Enforce.Argument(() => subjects);
return subjects.Count() == 5;
}