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