Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#控制台应用程序能否接收空参数?_C#_Command Line - Fatal编程技术网

C#控制台应用程序能否接收空参数?

C#控制台应用程序能否接收空参数?,c#,command-line,C#,Command Line,我在用C#编写的命令行应用程序上执行sanitaion。我想知道是否需要对传入的string[]args数组执行空检查?例如: static int Main(string[] args) { if(args != null) { // is this needed? } } 请注意,我已经找到了,但是在C#(&.NET)中找不到任何关于命令行参数的内容 还要注意的是,我确实尝试过不向命令行应用程序传递任何参数,也从未设法使args数组对象为null。我还尝

我在用C#编写的命令行应用程序上执行sanitaion。我想知道是否需要对传入的
string[]args
数组执行空检查?例如:

static int Main(string[] args)
{         
    if(args != null) { // is this needed?

    }
}
请注意,我已经找到了,但是在C#(&.NET)中找不到任何关于命令行参数的内容

还要注意的是,我确实尝试过不向命令行应用程序传递任何参数,也从未设法使args数组对象为null。我还尝试过使用
环境.GetCommandLineArgs()
访问命令行参数,并且该参数也从不为null

我也读过MS写的这篇文章,但看不到任何关于args数组永远不会为null的明确保证

编辑:简化了我的示例。

C标准在第3.1节“应用程序启动”中阐述了这一点:

入口点可以有一个形式参数。参数可以有任何名称,但参数的类型必须为字符串[]。如果存在形式参数,则执行环境将创建并传递一个string[]参数,该参数包含启动应用程序时指定的命令行参数字符串[]参数从不为null,但如果未指定命令行参数,则其长度可能为零

(我的大胆)


因此答案是:不,控制台应用程序的
Main()
永远不能接收空的
args[]
参数。

作为最佳实践(甚至对于单元测试),最好检查
null
无论如何,这是基于观点的。在我看来,您应该始终检查公共API中的参数。如果必须传递参数,则可以传递
null
。这使得
null
检查合理且至关重要。使用反射调用入口点将有可能使
args
null
请参见:。@mihail我没有说您应该这样做。但是正如您在提供的提琴上看到的,有时您不是调用堆栈中的第一个,因此为所有类型的可能输入做好准备并没有什么错。