C# 命令行参数解析成字符串数组
在C#中,经常需要将包含命令行参数的字符串分割成字符串数组。本文探讨了标准函数和推荐方法来完成此任务。
一个重要的考虑因素是处理包含空格的双引号字符串。仅仅基于空格分割字符串是不够的,因为它会错误地分割双引号字符串。
标准函数
C# 没有提供专门用于此目的的标准函数。可以使用自定义函数检查每个字符来实现此功能。
推荐方法
一种推荐的方法是使用以下代码块:
<code class="language-csharp">public static IEnumerable<string> SplitCommandLine(string commandLine) { bool inQuotes = false; return commandLine.Split(c => { if (c == '\"') inQuotes = !inQuotes; return !inQuotes && c == ' '; }) .Select(arg => arg.Trim().TrimMatchingQuotes('\"')) .Where(arg => !string.IsNullOrEmpty(arg)); }</code>
此方法根据一个检查引号和空格的函数分割字符串,然后修剪空格和引号。
自定义扩展方法
另一种方法是创建自定义扩展方法:
<code class="language-csharp">public static IEnumerable<string> Split(this string str, Func<char, bool> controller) { int nextPiece = 0; for (int c = 0; c < str.Length; c++) { if (controller(str[c])) { yield return str.Substring(nextPiece, c - nextPiece); nextPiece = c + 1; } } yield return str.Substring(nextPiece); } public static string TrimMatchingQuotes(this string input, char quote) { if ((input.Length >= 2) && (input[0] == quote) && (input[input.Length - 1] == quote)) return input.Substring(1, input.Length - 2); return input; }</code>
使用这些方法,可以分割命令行字符串:
<code class="language-csharp">string[] parameterArray = SplitCommandLine(parameterString).ToArray();</code>
示例用法
以下示例演示了上述方法的用法:
<code class="language-csharp">string parameterString = @"/src:""C:\tmp\Some Folder\Sub Folder"" /users:""[email protected]"" tasks:""SomeTask,Some Other Task"" -someParam foo"; string[] parameterArray = SplitCommandLine(parameterString).ToArray(); foreach (string parameter in parameterArray) { Console.WriteLine(parameter); }</code>
以上是如何在C#中高效地将命令行参数解析为字符串数组?的详细内容。更多信息请关注PHP中文网其他相关文章!