首頁 >後端開發 >C++ >如何在 C# 中有效地從單一字串中拆分命令列參數?

如何在 C# 中有效地從單一字串中拆分命令列參數?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-15 11:54:43779瀏覽

How to Effectively Split Command-Line Parameters from a Single String in C#?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn