2012-06-14 20 views
5

Odziedziczę konserwację na kilku aplikacjach konsolowych, które są wprowadzane, oczywiście, z static void Main(string[] args). Jednak kod ignoruje tablicę args i zamiast tego odczytuje parametry wiersza polecenia z System.Environment.CommandLine.Jaka jest różnica między (string [] args) a System.Environment.CommandLine?

Czy występuje tutaj różnica funkcjonalna?

Zawartość wygląda identycznie. Jeśli cokolwiek, podejrzewam, że osiągnięto minutę wydajności, wywołując System.Environment.CommandLine (ale nie na tyle, żebym kiedykolwiek był zainteresowany lub wystarczająco starał się zmierzyć).


UPDATE: Podejrzewałem, że System.Environment.CommandLine powinien zawierać wykonywalny ścieżki, ale nie widział go ... bo szukałem w złym miejscu. Kod TAKŻE ma string[] arrCmdLine = System.Environment.GetCommandLineArgs(); .... System.Environment.CommandLine.ToLower() jest sprawdzany pod kątem obecności "debugowania", podczas gdy wszystkie inne parametry są wyodrębniane z GetCommandLineArgs(), a ja byłem mentalnie łącząc te dwa, podczas gdy ja szedłem "dlaczego nie po prostu użyć args[]?"

Przez lata borykałem się z najlepszym sposobem analizowania argumentów wiersza poleceń, gdy przez cały czas było "umieszczanie ich we właściwej kolejności!" [jk]

Odpowiedz

7

System.Environment.CommandLine zawiera plik wykonywalny i argumenty jako pojedynczy ciąg.

// 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

Parametr args jest tablicą argumentów. Więc póki możesz parsować poszczególne argumenty z System.Environment.CommandLine, nie jestem pewien, dlaczego chciałbyś. Jedynym powodem, dla którego widzę, jest to, że musisz uzyskać dostęp do argumentów spoza Main(), co i tak jest prawdopodobnie złym pomysłem. Twoja metoda powinna obsługiwać argumenty i przekazywać je w miarę potrzeby pozostałej części aplikacji.

Powiązane problemy