Analisar argumentos de linha de comando de diferentes formatos

votos
0

Eu estou tentando converter os argumentos de linha de comando para diferentes formatos. Por exemplo, se eu estou tentando obter um usuário específico, seria GetUser=UserName, mas eu também tenho métodos que não precisam de sinal de igual, tais como GetAllUsers. Agora eu estou atualmente divisão no =, mas eu não preciso fazer isso para todos os comandos. Eu tentei defini-lo como uma condicional, onde se =é detectado, ele irá dividir, caso contrário ele vai apenas tomar o argumento como uma string, mas estou ficandoCannot implicitly convert type 'string' to 'System.Collections.Generic.Dictionary<string, string>

Código:

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

Publicado 13/01/2020 em 23:52
fonte usuário
Em outras línguas...                            


2 respostas

votos
0

Você está tentando atribuir uma string para um objeto de dicionário. Se você quiser uma coleção (como Dictionary), então você deve usar o método Add assim:

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

    }

Eu já obrigou a ser "GetUser" como o valor aqui, mas você pode realmente quer algo diferente. Seu dicionário está usando pares chave-valor e você diria resultados [ "GetUser"] para retornar uma string para "GetUser". Você também pode usar TryGetValue para validar que GetUser foi efectivamente prestado.

Além disso, se você só quer retornar a string que é depois GetUser (por exemplo, nome de usuário), então você poderia alterar os resultados a uma corda e apenas atribuir isso diretamente e ignorar todo o uso de um dicionário, o que parece um exagero para a sua amostra (talvez o seu verdadeiro projeto é muito mais complexa embora).

Respondeu 14/01/2020 em 00:17
fonte usuário

votos
0

Na parte mais, você está tentando corda atribuir ao dicionário através da declaração results = Convert.ToString(arg);

Então, por favor, alterar parte pessoa com algo parecido como mostrado abaixo:

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;
}
Respondeu 14/01/2020 em 00:49
fonte usuário

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