Heim >Backend-Entwicklung >C++ >Wie teilt man Befehlszeilenparameter in C# effizient auf?

Wie teilt man Befehlszeilenparameter in C# effizient auf?

Susan Sarandon
Susan SarandonOriginal
2025-01-15 11:39:50873Durchsuche

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

Fähigkeiten zur Aufteilung von C#-Befehlszeilenparametern

Einführung

In C# ist das Extrahieren eines einzelnen Arguments aus einer einzelnen Zeichenfolge, die Befehlszeilenargumente enthält, eine häufige Aufgabe. Allerdings gibt es möglicherweise keine Funktion, die direkt für diesen Zweck konzipiert ist. Dieser Artikel befasst sich mit Techniken, um dies mithilfe von Standardfunktionen oder benutzerdefinierten Lösungen zu erreichen.

Standard-Split-Funktion

Leider bietet C# keine integrierte Funktion zum Teilen einer Zeichenfolge basierend auf der Auswertung einzelner Zeichen. Das bedeutet, dass wir auf kreativere Ansätze setzen müssen.

Benutzerdefinierte Lösung mit Lambda-Funktion

Eine Möglichkeit besteht darin, eine Lambda-Funktion zu erstellen, die bestimmt, ob ein bestimmtes Zeichen die Zeichenfolge teilen soll. Mit dieser Funktion können wir die Split-Methode von C# verwenden, um die Zeichenfolge entsprechend aufzuteilen. Ein Beispiel ist wie folgt:

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

Die Erweiterungsmethode TrimMatchingQuotes entfernt übereinstimmende Anführungszeichen vom Anfang und Ende einer Zeichenfolge.

Benutzerdefinierte Split- und Trim-Erweiterungsmethoden

Eine weitere Option besteht darin, die String-Klasse um eine Split-Methode zu erweitern, die eine Lambda-Funktion als Eingabe akzeptiert, und eine TrimMatchingQuotes-Methode, die das Trimmen von Anführungszeichen übernimmt. Diese Erweiterungen sehen so aus:

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

Umfassende Anwendung

Dieser Ansatz ermöglicht es uns, die Zeichenfolge der Befehlszeilenargumente in ein einziges Argumentarray aufzuteilen und so das Verhalten der Angabe von Argumenten direkt in der Befehlszeile zu reproduzieren.

Fazit

Während es in C# an Funktionen speziell für die Aufteilung von Befehlszeilenargumenten mangelt, bietet es die Flexibilität, benutzerdefinierte Lösungen mithilfe von Lambda-Funktionen oder der Erweiterung der String-Klasse zu implementieren. Diese Methoden bieten effiziente und zuverlässige Möglichkeiten, einzelne Parameter für die weitere Verarbeitung oder Ausführung zu extrahieren.

Das obige ist der detaillierte Inhalt vonWie teilt man Befehlszeilenparameter in C# effizient auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn