Analizar los argumentos de línea de comandos de diferentes formatos

votos
0

Estoy tratando de convertir los argumentos de línea de comando para diferentes formatos. Por ejemplo, si yo estoy tratando de llegar a un usuario específico, que sería GetUser=UserName, pero también tengo métodos que no necesitan el signo de igualdad, como por ejemplo GetAllUsers. En este momento estoy actualmente en la división =, pero no necesito hacer eso para todos los comandos. He intentado ajustarlo a una condicional, en la que si =se detecta, éste se parte, de lo contrario se acaba de tomar el argumento como una cadena, pero yo estoy haciendoCannot 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 el 13/01/2020 a las 23:52
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
0

Usted está tratando de asignar una cadena a un objeto de diccionario. Si quieres una colección (como el Diccionario), entonces debería usar el método Add de este modo:

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

    }

He forzado a ser "GetUser" como el valor aquí, pero en realidad se puede desear algo diferente. Su diccionario está utilizando pares de valores clave y te diría resultados [ "getUser"] para devolver una cadena de "GetUser". También es posible usar TryGetValue para validar que GetUser fue efectivamente prestado.

Además, si lo que desea es volver la cadena que está detrás de GetUser (por ejemplo, nombre de usuario), entonces se podría cambiar los resultados a una cuerda y simplemente asignar dicha forma directa y saltar todo el uso de un diccionario, que parece excesivo para su muestra (tal vez su verdadera proyecto es mucho más compleja, aunque).

Respondida el 14/01/2020 a las 00:17
fuente por usuario

votos
0

En la parte más, que está intentando asignar a cadena diccionario a través de la declaración results = Convert.ToString(arg);

Así que, por favor, cambiar parte else con algo parecido a como se muestra a continuación:

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;
}
Respondida el 14/01/2020 a las 00:49
fuente por usuario

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