c# - pulsadores - pulsador arduino mega
leer interruptor de línea de comando (7)
¿Por qué no simplemente analiza el conjunto de argumentos pasados y actúa basándose en ellos, como este?
foreach (string arg in args)
{
switch (arg.Substring(0, 2).ToUpper())
{
case "/F":
// process argument...
break;
case "/Z":
// process arg...
break;
case "/D":
paramD = arg.Substring(3);
break;
default:
// do other stuff...
break;
}
}
Estoy tratando de leer los argumentos del usuario en una aplicación de C #. Sé cómo leerlos en base a la posición con
string[] args = Environment.GetCommandLineArgs();
pero me gustaría leerlos desde interruptores como
app.exe /f /d:foo
Estoy realmente luchando para encontrar información sobre cómo hacer esto ...
Bueno, básicamente ya lo has hecho. Procesa la string[]
que obtienes del marco y lo has hecho. No hay una forma integrada de lograr lo que está pidiendo.
Como solución de terceros puede echar un vistazo a
Creo que tendrás que rodar tu propia implementación. Después de escribir pruebas unitarias para evaluar el nuevo método, podría comenzar a pensar en las líneas de ...
foreach (string arg in args)
{
flagF = flagF || arg == "/f"; // assuming F is boolean
flagD = flagD ?? (arg.Substring(0,3) =="/d:" ? arg.Substring(3) : null);
}
He visto un par de respuestas que recorren la colección de cadenas args. El problema es que necesita el siguiente elemento después de haber pulsado el interruptor que está buscando. Usé el índice de matriz de la colección para obtener el siguiente elemento.
En mi muestra estoy buscando un servidor y un puerto / S y / P. Espero que esto ayude a alguien:
var server = string.Empty;
var port = string.Empty;
for(var x = 0; x < args.Count(); x++)
{
switch (args[x].Trim().ToUpper())
{
case "/S":
server = args[x + 1];
break;
case "/P":
port = args[x + 1];
break;
}
}
Qué pasa,
// first is exe of executing program
string[] args = Environment.CommandLine.Split(''/'').Skip(1).ToArray();
foreach (string arg in args)
{
string value = arg.Trim();
switch (value)
{
case "f":
//...
continue;
}
if (value.StartsWith("d:"))
{
value = value.Substring(2);
// ...
continue;
}
}
void Main(string[] args )
{
foreach( var arg in args )
{
// process each arg if needed, i.e.,
// remove ''-'', ''/'', uppercase, whatever
switch(arg)
{
case "blah":
// ...
}
}
}
Las bibliotecas existen para este propósito, lo que hace que todo el proceso sea mucho más fácil, pero si se trata de una aplicación única, puede que no valga la pena. Depende de cuán complejos sean sus argumentos de línea de comando.