8

我有以下内容,想知道初始测试是否过大:

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

换句话说,我要问的是 args.Length 是否有可能为零,或者 args 为空......或者这些条件之一是否就足够了?

4

5 回答 5

15

好吧,Main它被定义为永远不会用null参数调用。如果它确实以某种方式接收到一个空参数,那么你的环境已经被破坏了,无论你做什么,所有的赌注都被取消了,所以通过检查null.

另一方面,如果您确实检查了 null,那么代码的读者和维护者将不得不理解为什么。为什么最初的程序员要进行如此无用的检查?他知道我们不知道的事情吗?我们不能只是删除它,因为他可能发现了一些奇怪的角落案例错误!

换句话说,您正在增加程序的复杂性,并绊倒代码的未来读者。不要那样做。那个未来的用户可能是。让你未来的自己快乐,写出有意义的代码。

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

在这样的测试中:args.Length == 0 || args == null,首先args.Length被评估,如果失败,则与. 换句话说,如果为 null,您的代码将抛出异常。它应该是argsnullargsargs == null || args.Length == 0

于 2012-03-19T08:30:51.473 回答
10

据此您只需要检查:

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

尽管检查null没有任何害处,但没有真正的需要。

于 2012-03-19T08:25:46.453 回答
3

做额外的控制从来都不是坏主意,如果这不是高性能,非常常用的功能。所以我想说,不,这不是矫枉过正。

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

于 2012-03-19T08:23:46.493 回答
3

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

PS 总是首先检查 null

于 2012-03-19T08:31:08.227 回答
0
if (args == null)
{
    Console.WriteLine("args is null"); // Check for null array
}
else
{
    if (args.Length == 0)
    {
        //do X
    }
    else 
    { 
        //do Y 
    }
}
于 2012-03-19T08:25:26.953 回答