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 == null
或args.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 }