首頁 >後端開發 >C++ >如何在C#中高效地將命令列參數解析為字串數組?

如何在C#中高效地將命令列參數解析為字串數組?

Patricia Arquette
Patricia Arquette原創
2025-01-15 11:41:48772瀏覽

How to Efficiently Parse Command-Line Parameters into a String Array in C#?

C# 命令列參數解析成字串陣列

在C#中,經常需要將包含命令列參數的字串分割成字串陣列。本文探討了標準函數和建議方法來完成此任務。

一個重要的考慮因素是處理包含空格的雙引號字串。僅僅基於空格分割字串是不夠的,因為它會錯誤地分割雙引號字串。

標準函數

C# 沒有提供專門用於此目的的標準函數。可以使用自訂函數檢查每個字元來實現此功能。

建議方法

一種建議的方法是使用以下程式碼區塊:

<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>

此方法根據一個檢查引號和空格的函數分割字串,然後修剪空格和引號。

自訂擴充方法

另一種方法是建立自訂擴充方法:

<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);
            nextPiece = c + 1;
        }
    }
    yield return str.Substring(nextPiece);
}

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>

使用這些方法,可以分割命令列字串:

<code class="language-csharp">string[] parameterArray = SplitCommandLine(parameterString).ToArray();</code>

範例用法

以下範例示範了上述方法的用法:

<code class="language-csharp">string parameterString = @"/src:""C:\tmp\Some Folder\Sub Folder"" /users:""[email protected]"" tasks:""SomeTask,Some Other Task"" -someParam foo";

string[] parameterArray = SplitCommandLine(parameterString).ToArray();

foreach (string parameter in parameterArray)
{
    Console.WriteLine(parameter);
}</code>

以上是如何在C#中高效地將命令列參數解析為字串數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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