Parsing kommandolinjeargumentene i forskjellige formater

stemmer
0

Jeg prøver å konvertere kommandolinjeargumentene til forskjellige formater. For eksempel, hvis jeg prøver å få en bestemt bruker, ville det være GetUser=UserName, men jeg har også metoder som ikke trenger det likhetstegn, for eksempel GetAllUsers. Akkurat nå er jeg for tiden splitting på =, men jeg trenger ikke å gjøre det for alle kommandoer. Jeg prøvde å sette den til en betinget, der hvis =det oppdages, vil det splitte, ellers vil det bare ta argument som en streng, men jeg fårCannot implicitly convert type 'string' to 'System.Collections.Generic.Dictionary<string, string>

Kode:

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

Publisert på 13/01/2020 klokken 23:52
kilden bruker
På andre språk...                            


2 svar

stemmer
0

Du prøver å tildele en streng til en ordbok objekt. Hvis du ønsker en samling (som ordbok) så bør du bruke Legg metoden slik:

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

    }

Jeg har tvunget det å være "GetUser" som verdi her, men du kan faktisk ønsker noe annet. Ordlisten bruker nøkkelverdi-par, og du vil si resultater [ "GetUser"] for å returnere en streng for "GetUser". Du kan også bruke TryGetValue å validere at GetUser faktisk ble levert.

I tillegg, hvis du bare ønsker å returnere strengen som er etter GetUser (f.eks brukernavn), så du kan endre resultatene til en streng og rettferdig tildele som direkte og hoppe over hele bruk av en ordbok, som synes overkill for prøven (kanskje den virkelige prosjektet er mye mer kompleks skjønt).

Svarte 14/01/2020 kl. 00:17
kilden bruker

stemmer
0

I andre del, er du prøver å tildele streng til ordlisten via uttalelsen results = Convert.ToString(arg);

Så, kan du endre andre del med noe sånt som vist nedenfor:

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;
}
Svarte 14/01/2020 kl. 00:49
kilden bruker

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