Compétences en matière de fractionnement des paramètres de ligne de commande C#
Présentation
En C#, extraire un seul argument d'une seule chaîne contenant des arguments de ligne de commande est une tâche courante. Cependant, il se peut qu’il n’existe pas de fonction conçue directement à cet effet. Cet article examine les techniques permettant d'y parvenir à l'aide de fonctionnalités standard ou de solutions personnalisées.
Fonction de partage standard
Malheureusement, C# ne fournit pas de fonction intégrée pour diviser une chaîne en fonction de l'évaluation de caractères individuels. Cela signifie que nous devons nous appuyer sur des approches plus créatives.
Solution personnalisée utilisant la fonction Lambda
Une solution consiste à créer une fonction lambda qui détermine si un caractère spécifique doit diviser la chaîne. En utilisant cette fonction, nous pouvons utiliser la méthode Split de C# pour diviser la chaîne en conséquence. Un exemple est le suivant :
<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>
La méthode d'extension TrimMatchingQuotes supprime les guillemets correspondants du début et de la fin d'une chaîne.
Méthodes d'extension personnalisées Split et Trim
Une autre option consiste à étendre la classe String pour inclure une méthode Split qui accepte une fonction lambda en entrée et une méthode TrimMatchingQuotes qui gère le découpage des guillemets. Ces extensions ressemblent à ceci :
<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>
Application complète
Cette approche nous permet de diviser la chaîne d'arguments de la ligne de commande en un seul tableau d'arguments, reproduisant le comportement de spécification des arguments directement sur la ligne de commande.
Conclusion
Bien que C# manque de fonctions spécifiquement pour diviser les arguments de ligne de commande, il offre la flexibilité nécessaire pour implémenter des solutions personnalisées à l'aide de fonctions lambda ou en étendant la classe String. Ces méthodes fournissent des moyens efficaces et fiables pour extraire des paramètres individuels en vue d'un traitement ou d'une exécution ultérieurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!