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) ,但它仍然不起作用。

基本上我想知道用户是否使用参数调用程序。 如果不是,程序将要求输入。

我怎样才能做到这一点? 提前致谢。

if(args.Length==0)应该有效, args[0]至少需要一个参数才能崩溃。

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

这应该也有效:

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

它是一个数组,并且有两个场景可能具有传递NO参数的含义。 取决于您的语义

args == nullargs.Length == 0

在这种情况下,在执行程序时调用该方法(例如,不将该方法称为unit testing的一部分),args参数将永远不会为空(使第一个测试变为冗余)我已将其包含在内以保证完整性,因为在主要的其他方法中可能容易遇到相同的情况

如果按顺序测试它们,则不必担心后一个表达式中的args为null

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

如果您已经在使用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){...} } 

这只是显示了另一个可用的选项,我同意使用.Length ,虽然我会删除空检查并使用条件访问,所以。

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