首頁 > 後端開發 > C++ > 如何在C#中高效拆分命令列參數?

如何在C#中高效拆分命令列參數?

Susan Sarandon
發布: 2025-01-15 11:39:50
原創
871 人瀏覽過

How to Efficiently Split Command-Line Parameters in C#?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板