【发布时间】:2009-03-20 09:23:16
【问题描述】:
假设我有这种扩展方法:
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;
}
【问题讨论】:
标签: c#