这对于评估Main(string[]args)来说是不是有些过头了

本文关键字:是不是 args 于评估 评估 Main string | 更新日期: 2023-09-27 18:28:09

我得到了以下内容,并想知道初始测试是否过度:

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

换句话说,我要问的是args是否存在可能性。长度为零,或者参数为空。。。。或者仅仅这些条件中的一个就足够了?

这对于评估Main(string[]args)来说是不是有些过头了

好吧,Main被定义为永远不会用null参数调用。如果确实以某种方式接收到了一个null参数,那么您的环境就会崩溃,无论您做什么,所有的赌注都会落空,所以检查null真的没有什么好处。

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

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

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

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

根据此,您只需要检查:

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

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

如果这不是高性能、经常使用的函数,那么进行额外的控制从来都不是一个坏主意。所以我想说,不,这并不过分。

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

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

PS首先检查是否为空始终

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