2008-09-17 15 views
18

Unten sind zwei Möglichkeiten zum Lesen der Befehlszeilenparameter. Die erste ist die Art, wie ich mich daran gewöhne, den Parameter hauptsächlich zu verwenden. Die Sekunde, auf die ich gestoßen bin, als ich den Code überprüft habe. Ich habe bemerkt, dass der zweite das erste Element im Array dem Pfad und der Anwendung zuweist, aber das erste überspringt dies.Die beste Methode zum Lesen von Befehlszeilenparametern in der Konsolenanwendung

Ist es nur Vorliebe oder ist der zweite Weg der bessere Weg jetzt?

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 

denke ich, das gleiche kann in C# getan werden, so dass es Frage nicht unbedingt ein vb.net ist.

Antwort

20

Zweiter Weg ist besser, weil es außerhalb der Haupt() verwendet werden kann, so wenn Sie Refaktor ist es eine Sache weniger zu denken.

Auch mag ich nicht die "Magie", die die Argumente im method-Parameter für den ersten Weg legt.

+1

+ 1 für Einzel Verantwortung Principle –

+1

Es kann außerhalb der main() Methode verwendet werden, ja. Aber was passiert, wenn Sie die Klasse instanziieren und aufrufen möchten? Sie müssen es über die Befehlszeile aufrufen, oder es ignoriert Ihre Parameter, richtig? Wäre es nicht besser, mehrere Signaturen zu haben, eine mit übergebenen Argumenten und eine ohne; wo die eine ohne sie aus der System.CommandLine extrahiert und an die andere übergeben? –

+0

@michael, natürlich würde ich diese Methode nicht in einer "Core" -Assembly aufrufen, nur im Konsolenprojekt. Ich dachte eher daran, etwas wie eine Settings-Klasse oder ein Äquivalent zu haben, das dafür sorgen würde, die Argumente so zu analysieren, dass sie für den Rest der App verwendbar sind. –

2

Der erste Weg ist besser, weil es einfacher ist.

1

Für mich scheint der erste Weg intuitiver, weil das ist, wie ich es seit meinen C/C++ Tagen mache.

Wenn Ihre Kommandozeile einen zu vielen Schalter hat, werfen Sie bitte einen Blick auf getopt, den Thomas empfiehlt. Es ist sehr nützlich. Ich habe jedoch keinen C# -Port des gleichen angesehen.

Regards,

kgr

Verwandte Themen