Parsen Befehlszeilenargumente von verschiedenen Formaten

stimmen
0

Ich versuche , Befehlszeilenargumente in verschiedene Formate zu konvertieren. Zum Beispiel, wenn ich versuche , einen bestimmten Benutzer zu bekommen, wäre es GetUser=UserName, aber ich habe auch Methoden , die das Gleichheitszeichen, wie zum Beispiel nicht benötigen GetAllUsers. Im Moment bin ich zur Zeit Splitting auf die =aber ich glaube nicht , dass für alle Befehle tun müssen. Ich habe versucht , es zu einem bedingten Einstellung, wo , wenn =erkannt wird, wird es aufgeteilt, sonst wird es dauern , nur das Argument als String, aber ich bin immerCannot 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;
        }

Veröffentlicht am 13/01/2020 um 23:52
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

Sie versuchen, eine Zeichenfolge in einem Wörterbuch Objekt zuweisen. Wenn Sie eine Sammlung (wie Dictionary) wollen, dann sollten Sie die Add-Methode, wie so verwenden:

    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);
        }

    }

Ich habe es gezwungen „GetUser“ als Wert , hier zu sein, aber man kann eigentlich etwas anderes will. Ihr Wörterbuch ist mit Key-Wert - Paare und Sie würden sagen , Ergebnisse [ „GetUser“] eine Zeichenfolge für „GetUser“ zurückzukehren. Sie können auch verwenden TryGetValue zu bestätigen , dass GetUser tatsächlich zur Verfügung gestellt wurde.

Außerdem, wenn Sie nur die Zeichenfolge zurückgeben möchten, die nach GetUser ist (zB Benutzername), dann könnten Sie die Ergebnisse in eine Zeichenfolge ändern und nur die direkt zuweisen und die gesamte Verwendung eines Dictionary überspringen, die viel des Guten für Ihre Probe scheint (vielleicht Ihre echte Projekt ist viel komplexer obwohl).

Beantwortet am 14/01/2020 um 00:17
quelle vom benutzer

stimmen
0

Im anderen Teil, versuchen Sie zu assign string zu Wörterbuch über die Aussage results = Convert.ToString(arg);

Also, bitte anderen Teil mit wie etwas ändern, wie unten dargestellt:

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;
}
Beantwortet am 14/01/2020 um 00:49
quelle vom benutzer

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