/ / Distinguir entre múltiples argumentos opcionales en la aplicación de consola c #: c #, argumentos, aplicación de consola

Distinguir entre múltiples argumentos opcionales en la aplicación de consola de c # - c #, argumentos, aplicación de consola

He leído varios artículos en SoF sobre esto, pero lo suficientemente divertido, siento que no hay una respuesta concisa. Tal vez todavía no he encontrado la publicación correcta.

Quiero saber la mejor manera de distinguir entre múltiples parámetros opcionales al llamar a su aplicación de consola de c #.

P.ej. Llamar a MyApp valor1 [valor2] [valor3] [valor4] [valor5]

Se puede llamar a esta aplicación usando 0 - n de los argumentos opcionales como:

c:MyApp.exe value1 value2 value3
c:MyApp.exe value1 value4 value5
c:MyApp.exe value1 value4

etc ...

Puedo extraer los argumentos con

var argValue = args[1]

pero, ¿cómo puedo saber cuál de todos estos argumentos opcionales se usaron realmente?

¿Debo simplemente prefijarlos con una etiqueta predefinida como:

c:MyApp.exe value1 myArg4:value4 myArg5:value5

Respuestas

2 para la respuesta № 1

Sí, debe proporcionar alguna forma de decir qué valor es cuál, al igual que lo haría para argumentos nombrados en una llamada a método. Las convenciones comunes son:

--myArg4=value4
--myArg4 value4

(Algunas herramientas prefieren --otros prefieren -.)

No hay nada integrado en el marco para hacer esto de manera muy simple, pero el línea de comando la biblioteca es muy fácil de incluir (solo como una fuente de inclusión; no es necesario que sea una biblioteca de clase separada). Usamos esto para Hora de Noda para todas nuestras herramientas de línea de comandos.

En mi experiencia, es relativamente raro haber nombrado parámetros de línea de comandos que también se pueden especificar sin los nombres. Entonces, aunque podría decirse que tú podría inferido del hecho de que hay cinco valores que son "solo los cinco valores en el orden correcto", es más común que solo se requieran nombres para todo.

En tu caso, parece que value1 es siempre requerido, por lo que se podría inferir que es el valor para cualquier argumento sin nombre ... pero no sé si la línea de comandos admite ese caso de uso; necesitaría investigarlo.