C#控制台应用程序能否接收空参数?
我在用C#编写的命令行应用程序上执行sanitaion。我想知道是否需要对传入的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。我还尝
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我没有说您应该这样做。但是正如您在提供的提琴上看到的,有时您不是调用堆栈中的第一个,因此为所有类型的可能输入做好准备并没有什么错。