每个方法都接受一组参数值.我们是否应该始终验证输入参数的非零值或允许代码失败RunTimeException?
我看过很多代码,人们并没有真正检查输入参数的空值,只是使用参数编写业务逻辑.什么是最好的方法?
void public( String a, Integer b, Object c)
{
if( a == null || b == null || c == null)
{
throw new RunTimeException("Message...");
}
.....business logic.....
}
Run Code Online (Sandbox Code Playgroud) 可以说我有这种扩展方法:
public static bool HasFive<T>(this IEnumerable<T> subjects)
{
if(subjects == null)
throw new ArgumentNullException("subjects");
return subjects.Count() == 5;
}
Run Code Online (Sandbox Code Playgroud)
你觉得这个空检查和异常抛出真的有必要吗?我的意思是,当我使用这种Count方法时,ArgumentNullException无论如何都会被抛出,对吧?
我可以想到我应该这样做的一个原因,但是我想听听别人对此的看法.是的,我问的理由是部分懒惰(想要尽可能少地写),但也因为我认为一堆空检查和异常抛出了一些混乱的方法,这些方法往往最终是他们真的需要.有人应该知道比将null发送到方法更好:p
无论如何,你们怎么想?
注意: Count()是一个扩展方法,将抛出一个ArgumentNullException,而不是一个NullReferenceException.见Enumerable.Count<TSource> Method (IEnumerable<TSource>).如果你不相信我自己尝试=)
注2:在这里给出的答案之后,我被说服开始检查更多的空值.我仍然很懒,所以我开始Enforce在Lokad共享库中使用该类.可以推荐看一下.而不是我的例子,我可以这样做:
public static bool HasFive<T>(this IEnumerable<T> subjects)
{
Enforce.Argument(() => subjects);
return subjects.Count() == 5;
}
Run Code Online (Sandbox Code Playgroud)