C#中高效分割单字符串命令行参数的方法
在C#中,获取传递给可执行文件的命令行参数数组是一项关键任务。当参数以单个字符串形式提供时,我们需要一种方法来提取各个参数,类似于C#直接在命令行中指定参数时的处理方式。本文介绍了一种自定义分割方法来实现此目的。
C#中没有标准函数可以根据特定条件分割字符串,因此我们定义了自己的扩展方法Split
:
<code class="language-csharp">public static IEnumerable<string> Split(this string str, Func<char, bool> controller)</code>
此方法接受一个函数作为参数,该函数确定何时分割字符串。在我们的例子中,我们使用lambda表达式:
<code class="language-csharp">Func<char, bool> controller = c => { if (c == '\"') inQuotes = !inQuotes; return !inQuotes && c == ' '; };</code>
此函数检查双引号和空格以确定分割点。双引号包含可能包含空格的参数,因此需要特殊处理。
分割字符串后,我们使用TrimMatchingQuotes
扩展方法进一步处理结果参数,删除任何前导或尾随双引号:
<code class="language-csharp">public static string TrimMatchingQuotes(this string input, char quote)</code>
结合这些方法,我们创建了SplitCommandLine
函数,该函数接受包含命令行参数的字符串并返回字符串数组:
<code class="language-csharp">public static IEnumerable<string> SplitCommandLine(string commandLine) { return commandLine.Split(controller) .Select(arg => arg.Trim(' ').TrimMatchingQuotes('\"')) .Where(arg => !string.IsNullOrEmpty(arg)); }</code>
此函数根据指定的条件分割字符串,修剪任何空格,并删除任何周围的双引号。生成的字符串数组准确地表示C#生成的命令行参数。
为了演示其功能,我们提供了一些测试用例:
<code class="language-csharp">Test(@"/src:""C:\tmp\Some Folder\Sub Folder"" /users:""[email protected]"" tasks:""SomeTask,Some Other Task"" -someParam", @"/src:""C:\tmp\Some Folder\Sub Folder""", @"/users:""[email protected]""", @"tasks:""SomeTask,Some Other Task""", @"-someParam");</code>
通过使用这些自定义分割函数,我们可以有效地从C#中的单个字符串中提取命令行参数,从而能够根据需要使用它们。
以上是如何在 C# 中有效地从单个字符串中拆分命令行参数?的详细内容。更多信息请关注PHP中文网其他相关文章!