Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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
“string[]args”在C#Main方法中是如何填充的?_C#_.net - Fatal编程技术网

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

“string[]args”在C#Main方法中是如何填充的?,c#,.net,C#,.net,在C#Main方法中,string[]args是如何填充的 例如,是否删除了空白?元素中是否有空字符串或null?单引号和双引号是如何处理的 只说 Main方法的参数是表示命令行参数的字符串数组 启动进程时,可以传递字符串作为参数。如何安排和分割这些完全取决于你 因此,如果使用Windows命令行,则运行: myexe.exe "Hello World" Joe Bloggs 您的数组将包含: {"Hello World", "Joe", "Bloggs"} 但是它只是以这种特殊的方式分开的

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


例如,是否删除了空白?元素中是否有空字符串或null?单引号和双引号是如何处理的

只说

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


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

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

myexe.exe "Hello World" Joe Bloggs
您的数组将包含:

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

但是它只是以这种特殊的方式分开的(注意,Hello World中的引号被删除了),因为.Net framework会自动为您解析它。

传递给您的程序的参数依赖于操作系统


您应该在程序中测试参数是否为null、空字符串、带空格以及处理单引号/双引号(如有必要)。

我相信提供给Main的参数是删除列表中第一个参数后返回的参数。MSDN描述了有关反斜杠的复杂逻辑:

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

如果双引号紧跟在两个或偶数个反斜杠之后,则每个继续进行的反斜杠对将替换为一个反斜杠,并删除双引号。如果双引号紧跟奇数个反斜杠(仅包括一个),则前面的每对反斜杠将替换为一个反斜杠,并重新显示剩余的反斜杠已移动;但是,在这种情况下,双引号不会被删除


感谢Christian.K的评论。

“例如,是否删除了空白?”---为什么不试试?这需要1分钟的时间。这里有一些信息,尽管空白似乎没有出现在本文档中。另一个有趣的阅读:规则(至少关于引号转义——这是最困难的事情)在的评论中有解释。我想你真正想问的是:“什么算法用于将基本上是一个长字符串的命令行拆分为C#args数组?"。这实际上是一个好问题,所以+1来对抗否决票。这取决于外部的命令行?!好吧,这很有趣。我认为你不能在windows中传入一个字符串数组。你可以传入一个字符串,而拆分取决于被调用进程。对于如何拆分它,有一些约定,但仅此而已。调用ee可以选择使用不同的规则。|我相信这在unixoid系统上是不同的,但我不是这些方面的专家。我非常确定Windows使用的argc+argv与*nix使用的一样。调用进程没有指定
string[]
作为参数。它只指定
string
(请参阅Win32
CreateProcess
API).NET运行时正在解释该字符串,以便获得一个漂亮的
字符串[]
@PhonicUK,这方面的文档在哪里?