C#检查您是否已通过参数

时间:2012-08-03 08:22:05

标签: 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.ComputeWithoutParameters();
    }
    else
    {
        ComputeParam cpter = new ComputeParam();
        foreach (string s in args){...}
    }
}

还尝试了if(args.Length==0),但它仍无效。

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

我该怎么做? 提前谢谢。

6 个答案:

答案 0 :(得分:38)

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

答案 1 :(得分:10)

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

答案 2 :(得分:4)

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

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