Heim >Backend-Entwicklung >C++ >Wie kann man Befehlszeilenparameter in C# effizient in ein String-Array analysieren?
C#-Befehlszeilenparameter werden in String-Arrays analysiert
In C# ist es oft notwendig, einen String mit Befehlszeilenparametern in ein String-Array aufzuteilen. In diesem Artikel werden Standardfunktionen und empfohlene Methoden zur Erfüllung dieser Aufgabe untersucht.
Eine wichtige Überlegung ist der Umgang mit Zeichenfolgen in doppelten Anführungszeichen, die Leerzeichen enthalten. Es reicht nicht aus, eine Zeichenfolge einfach anhand von Leerzeichen aufzuteilen, da dadurch Zeichenfolgen in doppelten Anführungszeichen fälschlicherweise aufgeteilt werden.
Standardfunktionen
C# stellt speziell für diesen Zweck keine Standardfunktion bereit. Diese Funktionalität kann mithilfe einer benutzerdefinierten Funktion erreicht werden, die jedes Zeichen überprüft.
Empfohlene Methode
Ein empfohlener Ansatz ist die Verwendung des folgenden Codeblocks:
<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>
Diese Methode teilt die Zeichenfolge basierend auf einer Funktion, die nach Anführungszeichen und Leerzeichen sucht, und schneidet dann die Leerzeichen und Anführungszeichen ab.
Benutzerdefinierte Erweiterungsmethode
Ein anderer Ansatz besteht darin, eine benutzerdefinierte Erweiterungsmethode zu erstellen:
<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>
Befehlszeilenzeichenfolgen können mit diesen Methoden geteilt werden:
<code class="language-csharp">string[] parameterArray = SplitCommandLine(parameterString).ToArray();</code>
Beispielverwendung
Das folgende Beispiel demonstriert die Verwendung der oben genannten Methode:
<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>
Das obige ist der detaillierte Inhalt vonWie kann man Befehlszeilenparameter in C# effizient in ein String-Array analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!