2012-08-03 8 views
14

bestanden haben, habe ich diesen Code:C# zu überprüfen, ob Sie Argumente oder nicht

public static void Main(string[] args) 
{   
    if (string.IsNullOrEmpty(args[0])) // Warning : Index was out of the bounds of the array 
    { 
     ComputeNoParam cptern = new ComputeNoParam(); 
     cptern.ComputeWithoutParameters(); 
    } 
    else 
    { 
     ComputeParam cpter = new ComputeParam(); 
     foreach (string s in args){...} 
    } 
} 

versuchte auch if(args.Length==0), aber es funktioniert immer noch nicht.

Grundsätzlich möchte ich herausfinden, ob der Benutzer das Programm mit Argumenten aufgerufen hat. Wenn nicht, wird das Programm nach Eingabe fragen.

Wie kann ich das tun? Vielen Dank im Voraus.

+3

Was passiert, wenn Sie 'args.Length == 0' versuchen? –

+2

Was hat nicht mit 'args.Length == 0' funktioniert? Ein bescheidener Tipp für die Zukunft: Wenn Sie sagen "es funktioniert nicht", ist das bei einer Problem-Erklärung nicht annähernd genug. Aufarbeiten, sagen, was nicht funktioniert, wie es nicht funktioniert, was stattdessen passiert, was Sie nicht erwarten, etc. =) –

+0

Wenn Sie 'if (args.Length == 0)' verwenden, und es nicht ' t Arbeit, was macht es anstatt zu arbeiten? – phoog

Antwort

28

if(args.Length==0) sollte funktionieren, args[0] erfordert mindestens ein Argument nicht abstürzen.

8
if(args == null || args.Length == 0) 
{ 
    // no arguments 
} 
else 
{ 
    // arguments 
} 
4

es ist ein Array und es gibt zwei Szenarien, die möglicherweise die Bedeutung haben keine Argumente übergeben. Je nach Ihrer Semantik

args == null oder args.Length == 0

In diesem Fall, in dem die Methode aufgerufen wird, wenn das Programm ausgeführt wird (zB nicht das Verfahren als Teil sagen, einen Komponententest Aufruf) das args-Argument wird nie Null sein (den ersten Test überflüssig zu machen) Ich habe es der Vollständigkeit halber eingefügt, weil die gleiche Situation leicht in anderen Methoden als

angetroffen werden könnte, wenn Sie sie in dieser Reihenfolge testen, müssen Sie sich nicht sorgen, dass args null in der letzter Ausdruck

if(args == null || args.Length == 0){ 
    ComputeNoParam cptern = new ComputeNoParam(); 
    cptern.ComputeWithoutParameters(); 
} 
else 
{ 
    ComputeParam cpter = new ComputeParam(); 
    foreach (string s in args){...} 
} 
+0

Bitte verwenden Sie ".Length" .. vorsichtig über den Großbuchstaben, nicht ".length" – levteck

4

Dies soll auch arbeiten:

if (args.Length < 1) 
{ 
    //no args passed 
} 
-1

Eine weitere verfügbare Option, wenn Sie bereits System.Linq verwenden, sind die Verwendung der Any() Erweiterung, zum Beispiel zu machen:

public static void Main(string[] args) 
{ 
    if (args == null && !args.Any()) 
    { 
     // No parameters passed. 
     ComputeNoParam cptern = new ComputeNoParam(); 
     cptern.ComputeWithoutParameters(); 

     return; 
    } 

    // process parameters 
    ComputeParam cpter = new ComputeParam(); 
    foreach (string s in args){...} 
} 

Dies auch geschrieben werden könnte:

public static void Main(string[] args) 
{ 
    if (!args?.Any() ?? true) 
    { 
     // No parameters passed. 
     ComputeNoParam cptern = new ComputeNoParam(); 
     cptern.ComputeWithoutParameters(); 

     return; 
    } 

    // process parameters 
    ComputeParam cpter = new ComputeParam(); 
    foreach (string s in args){...} 
} 

Dies zeigt nur eine andere Option für Sie, ich würde mit Goin zustimmen g mit .Length, obwohl ich den Null-Check fallen lassen und stattdessen bedingten Zugriff verwenden würde.

if (args?.Length == 0) { 
    // Code hit if args is null or zero 
} 
Verwandte Themen