2012-06-14 33 views
5

Estoy heredando mantenimiento en varias aplicaciones de consola que se ingresan, naturalmente, con static void Main(string[] args). Sin embargo, el código ignora la matriz args y, en su lugar, lee los parámetros de la línea de comandos de System.Environment.CommandLine.¿Cuál es la diferencia entre (cadena [] args) y System.Environment.CommandLine?

¿Hay alguna diferencia funcional, aquí?

El contenido es idéntico. En todo caso, sospecharía un golpe de rendimiento minuto al invocar System.Environment.CommandLine (pero no lo suficiente como para preocuparme o preocuparme por medir).


ACTUALIZACIÓN: He sospecha que System.Environment.CommandLine debe contener la ruta ejecutable, pero no lo estaba viendo ... porque yo estaba buscando en el lugar equivocado. El código TAMBIÉN tiene string[] arrCmdLine = System.Environment.GetCommandLineArgs(); .... System.Environment.CommandLine.ToLower() se comprueba la presencia de "depuración", mientras que todos los demás parámetros se extraen de GetCommandLineArgs() y estaba mentalmente combinando los dos mientras iba "¿por qué no utilizar args[]?"

Durante años he estado agonizando sobre la mejor manera de analizar args de línea de comandos, cuando todo fue "¡colóquelos en el orden correcto!" [jk]

Respuesta

7

System.Environment.CommandLine incluye el ejecutable y los argumentos como una sola cadena.

// Sample for the Environment.CommandLine property. 
using System; 

class Sample 
{ 
    public static void Main() 
    { 
    Console.WriteLine(); 
// Invoke this sample with an arbitrary set of command line arguments. 
    Console.WriteLine("CommandLine: {0}", Environment.CommandLine); 
    } 
} 
/* 
This example produces the following results: 

C:\>env0 ARBITRARY TEXT 

CommandLine: env0 ARBITRARY TEXT 
*/ 

http://msdn.microsoft.com/en-us/library/system.environment.commandline.aspx

El parámetro args es una matriz de argumentos. Entonces, si bien puede analizar los argumentos individuales desde System.Environment.CommandLine, no estoy seguro de por qué lo desea. La única razón por la que puedo ver es si necesita acceder a argumentos fuera de Main(), lo cual probablemente sea una mala idea de todos modos. Su método Main() debe manejar los argumentos y pasarlos por el resto de la aplicación según sea necesario.

Cuestiones relacionadas