【发布时间】:2012-03-06 11:10:49
【问题描述】:
以下行为是 C# .NET 中的某个特性还是错误?
测试应用:
using System;
using System.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Arguments:");
foreach (string arg in args)
{
Console.WriteLine(arg);
}
Console.WriteLine();
Console.WriteLine("Command Line:");
var clArgs = Environment.CommandLine.Split(' ');
foreach (string arg in clArgs.Skip(clArgs.Length - args.Length))
{
Console.WriteLine(arg);
}
Console.ReadKey();
}
}
}
使用命令行参数运行它:
a "b" "\\x\\" "\x\"
在我收到的结果中:
Arguments:
a
b
\\x\
\x"
Command Line:
a
"b"
"\\x\\"
"\x\"
传递给方法 Main() 的参数中缺少反斜杠和未删除的引号。除了手动解析Environment.CommandLine,正确的解决方法是什么?
【问题讨论】:
-
一般来说,与语言中的错误相比,代码中的错误更多。
-
请在程序中找到一个错误,其来源在原始帖子中显示。我会很感激的。
-
它看起来是一个特征:msdn.microsoft.com/en-us/library/… 如果双引号跟在两个或偶数个反斜杠之后,则将每个前面的反斜杠对替换为一个反斜杠并删除双引号。如果双引号后跟奇数个反斜杠,包括一个,则前面的每一对都被一个反斜杠替换,其余的反斜杠被删除;但是,在这种情况下,双引号不会被删除。