Het ontleden van commandoregel argumenten van verschillende formaten

stemmen
0

Ik probeer om command line argumenten om te zetten in verschillende formaten. Bijvoorbeeld, als ik ben op zoek naar een specifieke gebruiker te krijgen, zou het zijn GetUser=UserName, maar ik heb ook methoden die niet gelijk-teken, zoals nodig hebben GetAllUsers. Op dit moment Ik ben momenteel splitsen op het =, maar ik hoef niet om dat te doen voor alle commando's. Ik probeerde het instellen van een voorwaardelijk, waar als =wordt gedetecteerd, zal het splitsen, anders zal het gewoon het argument als een string, maar ik krijgCannot 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;
        }

De vraag is gesteld op 13/01/2020 om 21:52
bron van user
In andere talen...                            


2 antwoorden

stemmen
0

Je probeert een string naar een woordenboek object toe te wijzen. Als u een verzameling wilt (zoals Dictionary) dan moet je de methode Add zoals zo te gebruiken:

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

    }

Ik heb het gedwongen te worden "GetUser" als de waarde hier, maar u kunt eigenlijk willen iets anders. Uw woordenboek is het gebruik van key-value pairs en je zou zeggen resultaten [ "GetUser"] naar een string terug te keren voor "GetUser". Je kan ook gebruik TryGetValue te valideren dat GetUser daadwerkelijk werd verstrekt.

Bovendien, als je gewoon wilt de string dat is na GetUser (bijvoorbeeld Gebruikersnaam) terug te keren, dan kun je de resultaten naar een string te veranderen en gewoon rechtstreeks toe te wijzen dat en sla de hele gebruik van een woordenboek, dat overkill lijkt voor uw sample (misschien uw onroerend project is veel complexer wel).

antwoordde op 13/01/2020 om 22:17
bron van user

stemmen
0

In het andere deel, probeer je te toewijzen string naar woordenboek via de verklaring results = Convert.ToString(arg);

Dus, verander het andere deel met iets als, zoals hieronder weergegeven:

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;
}
antwoordde op 13/01/2020 om 22:49
bron van user

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