2008-09-17 23 views
18

A continuación se incluyen dos formas de lectura en los parámetros de la línea de comandos. La primera es la forma en que estoy acostumbrado a ver el uso del parámetro en general. El segundo en el que tropecé al revisar el código. Me di cuenta de que el segundo asigna el primer elemento de la matriz a la ruta y a la aplicación, pero el primero omite esto.La mejor manera de leer los parámetros de la línea de comandos en la aplicación de la consola

¿Es solo preferencia o es la segunda manera, la mejor manera ahora?

Sub Main(ByVal args() As String) 
    For i As Integer = 0 To args.Length - 1 
     Console.WriteLine("Arg: " & i & " is " & args(i)) 
    Next 

    Console.ReadKey() 
End Sub 



Sub Main() 
    Dim args() As String = System.Environment.GetCommandLineArgs() 

    For i As Integer = 0 To args.Length - 1 
     Console.WriteLine("Arg: " & i & " is " & args(i)) 
    Next 

    Console.ReadKey() 
End Sub 

Creo que lo mismo se puede hacer en C#, así que no es necesariamente una cuestión vb.net.

Respuesta

20

La segunda forma es mejor porque se puede usar fuera de la línea principal(), por lo que cuando se refactoriza es una cosa menos en la que pensar.

Además, no me gusta la "magia" que pone los args en el parámetro de método de la primera manera.

+1

+ 1 para la responsabilidad solo principio –

+1

Puede ser utilizado fuera del método main(), sí. Pero, ¿qué sucede cuando quieres instanciar la clase y llamarla? Tienes que invocarlo a través de la línea de comando, o ignora tus parámetros, ¿verdad? ¿no sería mejor tener múltiples firmas, una con argumentos pasados ​​y otra sin ella? donde el que está fuera los extraerá del System.CommandLine y pasará al otro? –

+0

@michael, por supuesto, no haría una llamada a ese método en un ensamblado "Core", solo en el proyecto de la consola. Estaba pensando más en la línea de tener algo así como una clase de configuración o equivalente, que se encargaría de analizar los argumentos de una manera que se pueda utilizar para el resto de la aplicación. –

2

La primera forma es mejor porque es más simple.

1

Para mí, la primera forma parece más intuitiva porque así es como lo he estado haciendo desde mis días en C/C++.

Si su línea de comandos tiene demasiados interruptores, eche un vistazo a getopt que Thomas recomienda. Es bastante útil. Aunque no he echado un vistazo al puerto C# del mismo.

Regards,

Kgr

Cuestiones relacionadas