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

4

我正在对我的C#命令行应用程序进行清洁处理。我想知道是否需要对传入的string[] args数组执行空值检查?例如:

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

    }
}

请注意,我已经找到了关于Java的类似问题(链接),但是没有找到任何关于C#(和.NET通用)命令行参数的内容。
还要注意,我确实尝试过不向命令行应用程序传递参数,并且从未成功使args数组对象为空。我还尝试使用Environment.GetCommandLineArgs()(链接)访问命令行参数,但也从未出现为空的情况。
我还阅读了微软编写的这个指南,但没有看到任何明确保证args数组永远不会为空。 编辑:简化了我的示例。

这是相当基于个人观点的。在我诚实的看法中,你应该始终检查公共API中的参数。 - MakePeaceGreatAgain
如果必须传递参数,则可以传递 null。这使得 null 检查合理且必不可少。 - Sinatr
编辑使问题完全不同并且明显duplicate。如果您查看msdn,您将了解为什么它不能是null - Sinatr
1
使用反射调用入口点可能导致 argsnull,见: https://dotnetfiddle.net/70zCd1。 - thehennyy
1
@mihail 我并没有说你应该这样做。但是正如你在提供的 fiddle 中所看到的,有时候你不是调用栈中的第一个,因此为所有可能的输入类型做好准备是没有错的。 - thehennyy
显示剩余8条评论
1个回答

7
C#标准在第3.1节“应用程序启动”中有所涉及:
入口点可以选择性地带一个正式参数。该参数可以任意命名,但是参数的类型必须是string[]。如果存在正式参数,则执行环境将创建并传递一个包含启动应用程序时指定的命令行参数的string[]参数。string[]参数永远不会为null,但如果未指定命令行参数,则可能长度为零。
(我加粗了)
因此答案是:不,控制台应用程序的Main()永远不可能收到null的args[]参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接