9

在 C# Main 方法中究竟是如何string[] args填充的?

例如,空白是否被剥离?是否有任何元素曾经为空字符串或 null?单引号和双引号是如何处理的?

MSDN 没有解释如何,只是说

Main 方法的参数是一个字符串数组,表示命令行参数

4

3 回答 3

5

当你启动一个进程时,你可以传递一个字符串作为你的参数。如何安排和拆分这些完全取决于您。

因此,如果使用 Windows 命令行,则运行:

myexe.exe "Hello World" Joe Bloggs

您的数组将包含:

{"Hello World", "Joe", "Bloggs"}

但它只是以这种特定方式拆分(注意 Hello World 周围的引号被删除),因为 .Net 框架会自动为您解析它。

于 2012-09-21T09:34:12.990 回答
4

我相信给 Main 的参数是Environment.GetCommandLineArgs()在删除列表的第一个后返回的参数。MSDN 描述了关于反斜杠的异常复杂的逻辑:

命令行参数由空格分隔。您可以使用双引号 (") 在参数中包含空格。但是,单引号 (') 不提供此功能。

如果双引号跟在两个或偶数个反斜杠之后,则将前面的每个反斜杠对替换为一个反斜杠并删除双引号。如果双引号后面有奇数个反斜杠,包括一个,则前面的每一对都被一个反斜杠替换,其余的反斜杠被删除;但是,在这种情况下,不会删除双引号。

感谢评论中的 Christian.K。

于 2012-09-26T10:02:37.580 回答
0

传递给程序的参数取决于操作系统。

您应该在程序中测试空值、空字符串、去除空格和处理单引号/双引号的参数(根据需要)。

于 2012-09-21T10:06:38.913 回答