Heim > Backend-Entwicklung > C++ > Wie kann man Befehlszeilenparameter effektiv von einer einzelnen Zeichenfolge in C# trennen?

Wie kann man Befehlszeilenparameter effektiv von einer einzelnen Zeichenfolge in C# trennen?

Mary-Kate Olsen
Freigeben: 2025-01-15 11:54:43
Original
783 Leute haben es durchsucht

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

So teilen Sie Befehlszeilenparameter einzelner Zeichenfolgen in C# effizient auf

In C# ist das Abrufen des Arrays von Befehlszeilenargumenten, das an die ausführbare Datei übergeben wird, eine wichtige Aufgabe. Wenn Parameter als einzelne Zeichenfolge bereitgestellt werden, benötigen wir eine Möglichkeit, die einzelnen Parameter zu extrahieren, ähnlich wie C# Parameter behandelt, wenn sie direkt in der Befehlszeile angegeben werden. In diesem Artikel wird eine benutzerdefinierte Segmentierungsmethode beschrieben, um dies zu erreichen.

Es gibt in C# keine Standardfunktion zum Teilen einer Zeichenfolge basierend auf bestimmten Bedingungen, daher haben wir unsere eigene Erweiterungsmethode Split definiert:

<code class="language-csharp">public static IEnumerable<string> Split(this string str, Func<char, bool> controller)</code>
Nach dem Login kopieren

Diese Methode akzeptiert als Argument eine Funktion, die bestimmt, wann die Zeichenfolge geteilt werden soll. In unserem Fall verwenden wir Lambda-Ausdrücke:

<code class="language-csharp">Func<char, bool> controller = c =>
{
    if (c == '\"')
        inQuotes = !inQuotes;

    return !inQuotes && c == ' ';
};</code>
Nach dem Login kopieren

Diese Funktion prüft doppelte Anführungszeichen und Leerzeichen, um den Teilungspunkt zu bestimmen. Doppelte Anführungszeichen schließen Argumente ein, die Leerzeichen enthalten können und daher eine besondere Behandlung erfordern.

Nachdem wir die Zeichenfolge geteilt haben, verwenden wir die Erweiterungsmethode TrimMatchingQuotes, um die resultierenden Parameter weiterzuverarbeiten, wobei wir alle führenden oder nachgestellten doppelten Anführungszeichen entfernen:

<code class="language-csharp">public static string TrimMatchingQuotes(this string input, char quote)</code>
Nach dem Login kopieren

Durch die Kombination dieser Methoden erstellen wir die Funktion SplitCommandLine, die eine Zeichenfolge mit Befehlszeilenargumenten akzeptiert und ein Array von Zeichenfolgen zurückgibt:

<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>
Nach dem Login kopieren

Diese Funktion teilt eine Zeichenfolge basierend auf angegebenen Kriterien auf, schneidet alle Leerzeichen ab und entfernt alle umgebenden doppelten Anführungszeichen. Das resultierende String-Array stellt die von C# generierten Befehlszeilenargumente genau dar.

Um die Funktionalität zu demonstrieren, stellen wir einige Testfälle zur Verfügung:

<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>
Nach dem Login kopieren

Durch die Verwendung dieser benutzerdefinierten Teilungsfunktionen können wir Befehlszeilenargumente effektiv aus einer einzelnen Zeichenfolge in C# extrahieren und sie so nach Bedarf verwenden.

Das obige ist der detaillierte Inhalt vonWie kann man Befehlszeilenparameter effektiv von einer einzelnen Zeichenfolge in C# trennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage