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