why*_*heq 8 c# program-entry-point args
我有以下内容,并想知道初始测试是否过度杀伤:
static void Main(string[] args) {
if (args.Length == 0 || args == null) {
//do X
}
else {
//do Y
}
}
Run Code Online (Sandbox Code Playgroud)
换句话说,我问的是args.Length是零的可能性,还是args为null ....或者只是其中一个条件就足够了?
jal*_*alf 15
好吧,Main定义为永远不会用null参数调用.如果它确实以某种方式接收到一个空参数,那么你的环境就会被破坏,无论你做什么,所有的赌注都会被取消,所以通过检查确实没有任何好处null.
在另一方面,如果你做检查空,那么阅读器和代码的维护必须明白为什么.为什么原来的程序员会进行这样一个无用的检查?他知道我们不知道的事吗?我们不能只删除它,因为他可能已经发现了一些奇怪的角落案例错误!
换句话说,您正在为程序增加复杂性,并扼杀未来的代码读者.不要那样做.未来的用户可能就是你.让自己的未来变得快乐,并编写有意义的代码.
但是,在这种空检查确实有意义的情况下,它必须是最左边的条件.
在这样的试验:args.Length == 0 || args == null,args.Length评价第一,如果失败,args进行比较null.换句话说,如果args为null,则代码将抛出异常.它应该是args == null || args.Length == 0
App*_*ker 10
根据这个,你只需要检查:
if (args.Length == 0)
{
// Do X
}
Run Code Online (Sandbox Code Playgroud)
虽然检查null没有造成任何伤害,但没有实际需要.