您能否在不转义 C# 中的引号的情况下区分命令行参数的原始数字和带引号的数字?

Can you differentiate between raw numbers versus quoted numbers for command-line arguments without escaping the quotes in C#?

对于 C# 控制台应用程序,如果我提供以下内容,我的参数将被解释为相同的值:

myapp.exe "0" 0

检查时0长度为1。

我想知道是否有一种方法可以在 C# 控制台应用程序的命令行中检测引用数字与原始数字,而无需强制转义用户输入的引号。

我知道你可以做到,

myapp.exe \"0\" 0

并在使用 Environment.GetCommandLineArgs() 检查命令行参数时返回 "0" 0,如下例所示。

using System;
using System.Collections.Generic;
using System.Linq;

namespace cl_app
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> arg_list = Environment.GetCommandLineArgs().ToList();
            foreach(var arg in arg_list)
            {
                Console.WriteLine(arg);
            }
        }
    }
}

这可以不用引号转义吗?如果不是,那是否是通用的 Windows 命令行限制?

您可以使用 Environment.CommandLine 将命令行作为原始字符串获取,然后从那里开始。

引用字符串以允许空格是标准的 Windows 命令行语法,不是限制,只是语法。此外,使用 \ 转义引号也是标准的。这就是 .NET 试图提供帮助并使用 Environment.GetCommandLineArgs()(和 static void Main(string[] args))中的这些规则解析参数的原因。

如果您想覆盖这些默认行为,您需要自己解析原始命令行。您可以从 Environment.CommandLine 中检索它。 returns 实际的命令行调用,因此包括程序名称,例如ConsoleApplication1.exe "0" 0.