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



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

myapp.exe "0" 0

并且在检查时只需以 1 的长度0即可。

我想知道是否有办法在命令行检测 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检索此内容。这将返回实际的命令行调用,因此包括程序名称,例如ConsoleApplication1.exe "0" 0.

最新更新