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
Patricia Arquetteoriginal
2025-01-15 11:41:48772parcourir

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>

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>

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>

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>

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!

Déclaration:
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