C# 检查你是否传递了参数

C# 检查你是否传递了参数,c#,args,C#,Args,我有以下代码: 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.ComputeWithoutParameter

我有以下代码:

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

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

我该怎么做?
提前感谢。

如果(args.Length==0)
可以工作,
args[0]
至少需要一个参数才能不崩溃。

这是一个数组,有两种情况可能意味着没有传递参数。取决于你的语义

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

在这种情况下,当程序执行时调用方法(例如,不作为单元测试的一部分调用该方法),args参数将永远不会为null(使第一个测试冗余),为了完整性,我将其包括在内,因为除了main之外的其他方法中可能很容易遇到相同的情况

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

if(args == null || args.Length == 0){
    ComputeNoParam cptern = new ComputeNoParam();
    cptern.ComputeWithoutParameters();
}
else
{
    ComputeParam cpter = new ComputeParam();
    foreach (string s in args){...}
}
这也应该起作用:

if (args.Length < 1)
{
    //no args passed
}
if(args.Length<1)
{
//没有通过args
}

如果您已经在使用
系统,另一个可用的选项是使用
Any()
扩展名,例如:

publicstaticvoidmain(字符串[]args)
{
如果(args==null&&!args.Any())
{
//没有传递任何参数。
ComputeNoParam cptern=新的ComputeNoParam();
cptern.ComputeWithoutParameters();
返回;
}
//工艺参数
ComputeParam cpter=新的ComputeParam();
foreach(args中的字符串s){…}
}
这也可以写成:

publicstaticvoidmain(字符串[]args)
{
如果(!args?.Any()?true)
{
//没有传递任何参数。
ComputeNoParam cptern=新的ComputeNoParam();
cptern.ComputeWithoutParameters();
返回;
}
//工艺参数
ComputeParam cpter=新的ComputeParam();
foreach(args中的字符串s){…}
}
这只是显示了您可以使用的另一个选项,我同意使用
.Length
,尽管我会放弃空检查并使用条件接收,所以

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

这应该适用于您的场景:

if (args == null || args.Length == 0)
{
    //Code when no arguments are supplied
}
else
{
    //Code when arguments are supplied
}
请注意,当使用| |或&&时,应在
args.Length==0
之前执行
check args==null
。这被称为“条件短路”,其中C#将开始评估第一个条件,如果是真的,则不会查看第二个条件。在这种情况下,C#将仅在第一个条件为false时计算第二个条件

假设您的条件对齐为
if(args.Length==0 | | args==null)
并且
args
变为
null,
它将在第一个条件上引发异常,尽管第二个条件为true


这是我们在设定条件时需要牢记的一点

当您尝试
args.Length==0
时会发生什么?有什么不适用于
args.Length==0
?未来的一个小提示:当你说“它不起作用”时,这还不足以解释问题。详细说明,说什么不起作用,它如何不起作用,会发生什么你不期望的情况,等等=)当你使用
时,如果(args.Length==0)
,它不起作用,它会做什么而不起作用?请注意,它起作用了。ComputeNoParam类中出现问题,请使用“.Length”。。注意大写字母,不要用“.length”作为答案。这比汤姆或阿尔宾的帖子更完整,尽管几分钟后就有人回答了。显式声明
args
数组不能为null,只有当运行时将其作为sntry点调用时,该值才为true。该方法也可以以其他方式调用,其中args可能为null,我在应答中也声明了这一点。我尝试在没有任何参数的情况下启动服务。Args是一个0元素数组,所以我猜Args永远不会为null?是的,我猜这么明确地声明
Args
数组不能为null在main中Args在任何情况下都会为null吗?显式声明
args
数组不能为null显式声明
args
数组不能为null