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

时间:2012-03-19 08:21:11

标签: c# main args

我有以下内容,并且想知道初始测试是否有点过分:

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

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

5 个答案:

答案 0 :(得分:15)

嗯,Main被定义为永远不会被null参数调用。如果 以某种方式接收到null参数,那么无论你做什么,你的环境都会被打破,所有的赌注都会被取消,所以通过检查null确实无法获得任何好处。 / p>

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

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

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

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

答案 1 :(得分:10)

根据this,您只需要检查:

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

虽然检查null没有造成任何伤害,但确实没有必要。

答案 2 :(得分:3)

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

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

答案 3 :(得分:3)

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

PS首先检查null

答案 4 :(得分:0)

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