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中文網其他相關文章!