C#命令行参数分割技巧
引言
在C#中,从包含命令行参数的单个字符串中提取单个参数是一项常见任务。然而,可能没有直接为此目的设计的函数。本文深入探讨了使用标准功能或自定义解决方案来实现此目标的技术。
标准分割函数
不幸的是,C#没有提供基于单个字符评估分割字符串的内置函数。这意味着我们必须依靠更具创造性的方法。
使用Lambda函数的自定义解决方案
一种方法是创建一个lambda函数,该函数确定特定字符是否应该分割字符串。使用此函数,我们可以利用C#的Split方法相应地分割字符串。示例如下:
<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>
TrimMatchingQuotes扩展方法从字符串的开头和结尾删除匹配的引号。
自定义Split和Trim扩展方法
另一种选择是扩展String类,使其包含一个接受lambda函数作为输入的Split方法和一个处理引号修剪的TrimMatchingQuotes方法。这些扩展如下所示:
<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).Trim(); nextPiece = c + 1; } } yield return str.Substring(nextPiece).Trim(); } 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>
综合运用
这种方法使我们能够将命令行参数字符串分割成单个参数数组,从而复制直接在命令行上指定参数的行为。
结论
虽然C#缺乏专门用于分割命令行参数的函数,但它提供了使用lambda函数或扩展String类来实现自定义解决方案的灵活性。这些方法提供了高效且可靠的方法来提取单个参数以进行进一步处理或执行。
以上是如何在C#中高效拆分命令行参数?的详细内容。更多信息请关注PHP中文网其他相关文章!