Analyse des arguments de ligne de commande de différents formats

voix
0

Je suis en train de convertir des arguments de ligne de commande à différents formats. Par exemple, si je suis en train d'obtenir un utilisateur spécifique, il serait GetUser=UserName, mais j'ai aussi des méthodes qui ne nécessitent pas le signe égal, par exemple GetAllUsers. En ce moment je suis actuellement sur le partage =mais je ne ai pas besoin de le faire pour toutes les commandes. J'ai essayé de le mettre à une condition, où si =est détecté, il sera divisé, sinon il suffit de prendre l'argument comme une chaîne, mais je reçoisCannot implicitly convert type 'string' to 'System.Collections.Generic.Dictionary<string, string>

Code:

 public static Dictionary<string, string> ParseArgs(string[] args)
        {
            Dictionary<string, string> results = new Dictionary<string, string>();
            foreach (string arg in args)
            {
                string[] parts = arg.Split('=');
                if (parts.Length > 1)
                {
                    results[parts[0]] = parts[1];
                    continue;
                }
                else
                {
                    results = Convert.ToString(arg);
                }

            }
            return results;
        }

Créé 13/01/2020 à 23:52
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
0

Vous essayez d'assigner une chaîne à un objet dictionnaire. Si vous voulez une collection (comme dictionnaire), vous devez utiliser la méthode Add comme ceci:

    foreach (string arg in args)
    {
        string[] parts = arg.Split('=');
        if (parts.Length > 1)
        {
            //results[parts[0]] = parts[1];
            results.Add(parts[0], parts[1]);
            continue;
        }
        else
        {
            results.Add("GetUser", arg);
        }

    }

Je l' ai forcé à être « GetUser » comme valeur, mais vous pouvez réellement vouloir quelque chose de différent. Votre dictionnaire utilise des paires valeur-clé et vous dirais que les résultats [ « GetUser »] pour retourner une chaîne pour « GetUser ». Vous pouvez également utiliser TryGetValue pour valider que GetUser a été effectivement fourni.

De plus, si vous voulez juste retourner la chaîne qui est après GetUser (par exemple Nom d'utilisateur), vous pouvez ensuite modifier les résultats à une chaîne et juste assigner que directement et sauter toute utilisation d'un dictionnaire, ce qui semble exagéré pour votre échantillon (peut-être votre vrai projet est beaucoup plus complexe que).

Créé 14/01/2020 à 00:17
source utilisateur

voix
0

Dans la partie d'autre, vous essayez de assign chaîne au dictionnaire via la déclaration results = Convert.ToString(arg);

Alors, s'il vous plaît changer une partie autre avec quelque chose comme comme indiqué ci-dessous:

public static Dictionary<string, string> ParseArgs(string[] args)
{
     Dictionary<string, string> results = new Dictionary<string, string>();
     foreach (string arg in args)
     {
          string[] parts = arg.Split('=');
          if (parts.Length > 1)
          {
               results[parts[0]] = parts[1];
               // continue; no need to use continue, as there are no more statements after this if-else, loop will anyway continue. but please uncomment if you have any in your actual code.
          }
          else
          {
               results[arg] = arg; // assuming arg string in args won't repeat, meaning its unique. Otherwise please use ContaineKey if condition before adding or over-writing.
           }
     }
     return results;
}
Créé 14/01/2020 à 00:49
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more