Разбор аргументов командной строки разных форматов - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь преобразовать аргументы командной строки в разные форматы. Например, если я пытаюсь получить определенного пользователя c, это будет 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;
        }

Ответы [ 2 ]

0 голосов
/ 14 января 2020

В остальной части вы пытаетесь присвоить строку словарю с помощью оператора 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;
}
0 голосов
/ 14 января 2020

Вы пытаетесь присвоить строку словарному объекту. Если вы хотите коллекцию (например, словарь), вы должны использовать метод 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 (например, Имя пользователя), тогда вы можете изменить результаты на строку и просто назначить это непосредственно и пропустить все использование словаря, что кажется чрезмерным для ваш образец (возможно, ваш реальный проект намного сложнее).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...