2012-08-03 52 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 
} 
相关问题