我有这段代码:
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)
,但它仍无效。
基本上我想知道用户是否使用参数调用程序。如果不是,程序将要求输入。
我该怎么做? 提前谢谢。
答案 0 :(得分:38)
if(args.Length==0)
应该有效,args[0]
至少需要一个参数才能崩溃。
答案 1 :(得分:10)
if(args == null || args.Length == 0)
{
// no arguments
}
else
{
// arguments
}
答案 2 :(得分:4)
它是一个数组,并且有两个场景可能具有传递NO参数的含义。取决于您的语义
args == null
或args.Length == 0
在这种情况下,在执行程序时调用该方法(例如,不将该方法作为单元测试的一部分调用),args参数将永远不会为null(使第一个测试变为冗余)我已将其包括在内完整性,因为在主要
之外的其他方法中可能容易遇到相同的情况如果按顺序测试它们,则不必担心后一个表达式中的args为空
if(args == null || args.Length == 0){
ComputeNoParam cptern = new ComputeNoParam();
cptern.ComputeWithoutParameters();
}
else
{
ComputeParam cpter = new ComputeParam();
foreach (string s in args){...}
}
答案 3 :(得分:4)
这也应该有效:
if (args.Length < 1)
{
//no args passed
}
答案 4 :(得分:1)
这应该适合您的情况:
if (args == null || args.Length == 0)
{
//Code when no arguments are supplied
}
else
{
//Code when arguments are supplied
}
使用||时,应注意在check args == null
之前应执行args.Length == 0
。要么 &&。这称为“条件短路”,其中C#将开始评估第一个条件,如果为真,则不会查看第二个条件。在这种情况下,仅当第一个条件为假时,C#才会评估第二个条件。
假设如果您的条件与if(args.Length == 0 || args == null)
对齐并且args
变成null,
,则尽管第二个条件为true,但第一个条件将引发异常。
这是我们在放置条件时要记住的事情。
答案 5 :(得分:-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){...}
}
这只是显示了另一个可用的选项,我同意使用.Length
,但我会删除空检查并使用条件访问,所以。
if (args?.Length == 0) {
// Code hit if args is null or zero
}