Warum behandelt C # Befehlszeilenargumente nicht inkonsistent?

8

In C # wird bei Befehlszeilenargumenten, die direkt von Main () kommen, der ex-Name weggelassen, im Gegensatz zur Tradition von C.

Wenn Sie die gleichen Befehlszeilenargumente über Environment.GetCommandLineArgs erhalten, ist dies ebenfalls möglich.

Gibt es einen guten logischen Grund, warum mir diese scheinbare Inkonsistenz fehlt?

%Vor%

Ausgabe:

%Vor%     
mickeyf 14.12.2010, 17:00
quelle

3 Antworten

15

Weil es nicht C ist und daher nicht an seine Konventionen gebunden ist. Den exe-Namen zu benötigen, ist so ziemlich ein Randfall; die geringe Anzahl von Malen, die ich benötigt habe (im Vergleich zu den anderen Argumenten) IMO rechtfertigt die Entscheidung, es wegzulassen.

Dies wird zusätzlich in der Spezifikation gefordert (ECMA334v4, §10.1); (schnippelt zu relevanten Teilen):

  

10. Grundlegende Konzepte

     

10.1 Anwendungsstart

...

  

Diese Einstiegspunkt-Methode heißt immer Main und soll eines der   folgende Unterschriften:

%Vor%

...

  

• Lassen Sie args den Namen des Parameters angeben. Wenn die Länge des mit args bezeichneten Arrays größer ist als   Null, die Array-Mitglieder args[0] bis args[args.Length-1] , einschließlich, sollen sich auf Strings beziehen,    Anwendungsparameter genannt, die von der Host-Umgebung implementierungsdefinierte Werte erhalten   vor dem Start der Anwendung. Die Absicht ist, der Anwendung Informationen zu liefern, die zuvor bestimmt wurden   Anwendungsstart von woanders in der gehosteten Umgebung. Wenn die Hostumgebung nicht in der Lage ist   Bei der Lieferung von Strings mit Groß - und Kleinbuchstaben muss die Umsetzung sicherstellen, dass   Zeichenfolgen werden in Kleinbuchstaben empfangen. [ Hinweis : Auf Systemen, die eine Befehlszeile, eine Anwendung oder Anwendungsparameter unterstützen   entsprechen dem, was allgemein als Befehlszeilenargumente bezeichnet wird. Endnote ]

    
Marc Gravell 14.12.2010 17:05
quelle
8

[status-by-design] - Ссылка

  

Im Gegensatz zu C und C ++ wird der Name des Programms nicht als erstes Befehlszeilenargument behandelt.

    
jcolebrand 14.12.2010 17:04
quelle
5

Der Grund, warum die beiden Methoden unterschiedliche Ergebnisse liefern, liegt an Context .

  • Die Klasse Umgebung wird verwendet, um die aktuelle Umgebung und den aktuellen Prozess zu bearbeiten , und es macht Sinn, dass Environment.GetCommandLineArgs(); den ausführbaren Namen zurückgibt, da es Teil des Prozesses ist.

  • Wie für das Array args, für mich ist es sinnvoll, den Namen der ausführbaren Datei auszuschließen. Ich weiß, dass ich die ausführbare Datei aufruft und im Kontext der Ausführung meiner Anwendung möchte ich wissen, welche Argumente an sie gesendet wurden.

Am Ende des Tages ist es wichtig, einen Weg zu haben, beide Alternativen zu finden.

    
Waleed Al-Balooshi 14.12.2010 17:18
quelle

Tags und Links