2012-08-03 48 views
14

我有這樣的代碼:C#檢查,如果你已經通過論證或不

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){...} 
    } 
} 

也試過if(args.Length==0),但它仍然無法正常工作。

基本上我想知道用戶是否用參數調用程序。如果不是,程序將要求輸入。

我該怎麼做? 在此先感謝。

+3

當您嘗試'args.Length == 0'時會發生什麼? – 2012-08-03 08:23:20

+2

什麼不適用於'args.Length == 0'?對未來的小竅門:當你說「它不起作用」時,這還不足以解釋問題。詳細說明,說什麼不起作用,如何起作用,什麼事情發生,而不是你期望的,等等。=) – 2012-08-03 08:23:26

+0

當你使用if(args.Length == 0)時,它不會'工作,它做什麼而不是工作? – phoog 2012-08-03 08:23:56

回答

28

if(args.Length==0)應該工作,args[0]需要至少一個參數不會崩潰。

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

它是一個數組,有兩種情況可能會傳遞NO參數的含義。根據您的語義

args == nullargs.Length == 0

在這種情況下被執行時的程序(例如,不調用方法,說一個單元測試的一部分),args參數永遠不會爲空的方法被調用(使第一個測試冗餘)我已經包括它的完整性,因爲相同的情況可能很容易遇到其他方法比主

如果你測試它們的順序,你不必擔心args爲空後者表達

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

請使用「.Length」..小心大寫字母,而不是「.length」 – levteck 2017-09-07 14:46:05

4

這也應該工作:

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

另一個可用的選項,如果您已經使用System.Linq就是利用Any()擴展,例如:

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){...} 
} 

這也可以寫成:

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){...} 
} 

這只是顯示另一個選項可供您使用,我同意布萊恩g與.Length,雖然我會放棄空檢查,並使用條件訪問,所以。

if (args?.Length == 0) { 
    // Code hit if args is null or zero 
} 
相關問題