c# - 这是评估 Main(string[] args) 的矫枉过正吗

标签 c# program-entry-point args

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

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

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

最佳答案

嗯,Main 被定义为永远不会使用 null 参数调用。如果它确实以某种方式接收到一个 null 参数,那么您的环境就会被破坏,无论您做什么,所有的赌注都会被取消,所以检查 null 真的没有任何好处>.

另一方面,如果您确实检查空值,那么代码的读者和维护者将不得不理解原因。为什么原来的程序员要投入这么无用的支票呢?他知道我们不知道的事情吗?我们不能就这样删除它,因为他可能已经发现了一些奇怪的角落案例错误!

换句话说,您正在为您的程序增加复杂性,并使代码的 future 读者感到困惑。不要那样做。那个 future 的用户可能就是。让 future 的自己快乐,并编写有意义的代码。

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

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

关于c# - 这是评估 Main(string[] args) 的矫枉过正吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9766926/

相关文章:

c# - 可选参数和参数数组

c# - 母版/内容页和 Request.Form/控件名称

java - 通过其他类构造函数在主方法中创建对象时访问对象属性

java - 具有多个 main 的 Jar

forms - 如何在两个表单之间传递多个记录?

java - 在运行配置中使用字符串作为参数并在 if 语句中使用它

c# - 创建一组文件的打包二进制表示?

C# WebBrowser 控件拦截从 PHP 脚本在新窗口中下载

javascript - 正则表达式在多行上进行多个匹配

java.lang.ArrayIndexOutOfBoundsException : 0 when I try to access to the first argument of args parameters, 为什么?