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%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
...
%Vor%Diese Einstiegspunkt-Methode heißt immer
Main
und soll eines der folgende Unterschriften:
...
• Lassen Sie
args
den Namen des Parameters angeben. Wenn die Länge des mitargs
bezeichneten Arrays größer ist als Null, die Array-Mitgliederargs[0]
bisargs[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 ]
[status-by-design] - Ссылка
Im Gegensatz zu C und C ++ wird der Name des Programms nicht als erstes Befehlszeilenargument behandelt.
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.
Tags und Links c# command-line visual-studio