Rozebrat argumenty příkazové řádky různých formátů

hlasů
0

Snažím se převést argumenty příkazového řádku do různých formátů. Například, když jsem se snaží dostat uživatele specifický, že by bylo GetUser=UserName, ale mám také metody, které nepotřebují rovnítko, například GetAllUsers. Teď jsem v současné době dělení na =, ale nepotřebuji k tomu, že u všech příkazů. Snažil jsem se nastavit ji na podmíněný, kde, pokud =je zjištěna, bude to rozdělit, jinak to bude jen trvat argument jako řetězec, ale já začínámCannot implicitly convert type 'string' to 'System.Collections.Generic.Dictionary<string, string>

Kód:

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

Položena 13/01/2020 v 23:52
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
0

Snažíte se přiřadit řetězec do slovníku objektu. Pokud se chcete sbírku (jako slovník), pak byste měli použít metodu Add jako tak:

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

    }

Jsem nucen to být „GetUser“ jako hodnota zde, ale můžete skutečně chtějí něco jiného. Váš slovník používá párů klíč-hodnota a vy byste říci výsledky [ „GetUser“] vrátit řetězec pro „GetUser“. Dalo by se také použít TryGetValue ověřit, zda GetUser byla skutečně poskytnuta.

Navíc, jen chci vrátit řetězec, který je po GetUser (např Uživatelské jméno), pokud jste, pak byste mohl změnit výsledky na provázku a stačí nastavit, které přímo a přeskočit celou použití slovníku, který se zdá být zbytečná pro vzorek (snad vaši skutečnou projekt je mnohem složitější, ačkoli).

Odpovězeno 14/01/2020 v 00:17
zdroj uživatelem

hlasů
0

V jiném dílu, které se snažíte přiřadit řetězec do slovníku pomocí příkazu results = Convert.ToString(arg);

Takže, prosím, změňte jiného část se něco takového, jak je uvedeno níže:

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;
}
Odpovězeno 14/01/2020 v 00:49
zdroj uživatelem

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