您能否在不转义 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
.
对于 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
.