Maison > développement back-end > C++ > Comment analyser efficacement les paramètres de ligne de commande dans un tableau de chaînes en C# ?

Comment analyser efficacement les paramètres de ligne de commande dans un tableau de chaînes en C# ?

Patricia Arquette
Libérer: 2025-01-15 11:41:48
original
778 Les gens l'ont consulté

How to Efficiently Parse Command-Line Parameters into a String Array in C#?

Les paramètres de ligne de commande C# sont analysés dans des tableaux de chaînes

En C#, il est souvent nécessaire de diviser une chaîne contenant des paramètres de ligne de commande en un tableau de chaînes. Cet article explore les fonctions standard et les méthodes recommandées pour accomplir cette tâche.

Une considération importante est la gestion des chaînes entre guillemets contenant des espaces. Il ne suffit pas de diviser simplement une chaîne en fonction des espaces, car cela diviserait de manière incorrecte les chaînes entre guillemets doubles.

Fonctions standards

C# ne fournit pas de fonction standard spécifiquement à cet effet. Cette fonctionnalité peut être obtenue à l'aide d'une fonction personnalisée qui vérifie chaque caractère.

Méthode recommandée

Une approche recommandée consiste à utiliser le bloc de code 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>
Copier après la connexion

Cette méthode divise la chaîne en fonction d'une fonction qui vérifie les guillemets et les espaces, puis coupe les espaces et les guillemets.

Méthode d'extension personnalisée

Une autre approche consiste à créer une méthode d'extension personnalisée :

<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>
Copier après la connexion

Les chaînes de ligne de commande peuvent être divisées en utilisant ces méthodes :

<code class="language-csharp">string[] parameterArray = SplitCommandLine(parameterString).ToArray();</code>
Copier après la connexion

Exemple d'utilisation

L'exemple suivant démontre l'utilisation de la méthode ci-dessus :

<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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal