是评估Main(string args)的过度杀伤力

我有以下内容,并想知道初始测试是否过度杀伤:

static void Main(string[] args) { if (args.Length == 0 || args == null) { //do X } else { //do Y } } 

换句话说,我要问的是args.Length为零的可能性,或者args为null ….或者只是其中一个条件就足够了?

好吧, Main定义为永远不会使用null参数调用。 如果它确实以某种方式接收到一个null参数,那么你的环境就会被破坏,无论你做什么都会关闭所有的赌注,所以通过检查null确实无法获得任何好处。

另一方面,如果你检查null,那么代码的读者和维护者必须理解为什么 。 为什么原来的程序员会进行这样一个无用的检查? 他知道我们不知道的事吗? 我们不能只是删除它,因为他可能已经发现了一些奇怪的角落案例错误!

换句话说,您正在增加程序的复杂性,并扼杀未来的代码读者。 不要那样做。 未来的用户可能就是 。 让自己的未来变得快乐,并编写有意义的代码。

但是,在这种空检查确实有意义的情况下,它必须是最左边的条件。

在这样的测试中: args.Length == 0 || args == null args.Length == 0 || args == nullargs.Length评估args.Length ,如果失败,则将argsnull进行比较。 换句话说,如果args为null,则代码将抛出exception。 它应该是args == null || args.Length == 0 args == null || args.Length == 0

根据这个 ,你只需要检查:

 if (args.Length == 0) { // Do X } 

虽然检查null不会造成任何伤害,但是没有必要。

如果没有进入高性能,非常频繁的使用function,那么进行额外控制绝对不是一个好主意。 所以我会说,不是,这不是矫枉过正。

另一件事:首先检查null ,然后检查Length

如果没有输入数据,则args.Length等于0,但不为null。 如果有任何输入数据,则agrs.Length等于输入参数的计数。 总之,args不能为空,但长度可以为零。

PS首先检查null

 if (args == null) { Console.WriteLine("args is null"); // Check for null array } else { if (args.Length == 0) { //do X } else { //do Y } }