Разбор аргументов командной строки различных форматов

голоса
0

Я пытаюсь преобразовать аргументы командной строки в различные форматы. Например, если я пытаюсь получить пользователь конкретного, это было бы GetUser=UserName, но у меня также есть методы , которые не нуждаются в знаке равенства, такие как GetAllUsers. Сейчас я в настоящее время разделение на =но мне не нужно , чтобы сделать это для всех команд. Я попытался установить его в условном, где , если =обнаружено, он будет разделен, в противном случае он будет просто взять аргумент в виде строки, но я получаюCannot implicitly convert type 'string' to 'System.Collections.Generic.Dictionary<string, string>

Код:

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

Задан 13/01/2020 в 23:52
источник пользователем
На других языках...                            


2 ответов

голоса
0

Вы пытаетесь присвоить строку в объект словаря. Если вы хотите коллекции (например, словарь), то вам следует использовать метод Add как так:

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

    }

Я заставил его быть «GetUser» в качестве значения здесь, но вы можете на самом деле хотите что - то другое. Ваш словарь использует пар ключ-значение , и вы бы сказали результаты [ «GetUser»] возвращает строку для «GetUser». Вы можете также использовать TryGetValue для подтверждения того, что GetUser фактически предусмотрено.

Кроме того, если вы просто хотите, чтобы вернуть строку, после того, как GetUser (например, имя пользователя), то вы могли бы изменить результаты в строку и просто присвоить, что непосредственно и пропустить все использование словаря, который кажется излишним для вашего образца (возможно, и реальный проект является гораздо более сложным, хотя).

Ответил 14/01/2020 в 00:17
источник пользователем

голоса
0

В еще части, вы пытаетесь присвоить строку в словарь с помощью заявления results = Convert.ToString(arg);

Поэтому, пожалуйста, изменить еще часть с чем-то вроде, как показано ниже:

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;
}
Ответил 14/01/2020 в 00:49
источник пользователем

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