34

我有这个代码:

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)了,还是不行。

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

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

4

6 回答 6

54

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

于 2012-08-03T08:23:33.830 回答
11
if(args == null || args.Length == 0)
{
    // no arguments
}
else
{
    // arguments
}
于 2012-08-03T08:24:13.347 回答
5

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

args == null或者args.Length == 0

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

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

if(args == null || args.Length == 0){
    ComputeNoParam cptern = new ComputeNoParam();
    cptern.ComputeWithoutParameters();
}
else
{
    ComputeParam cpter = new ComputeParam();
    foreach (string s in args){...}
}
于 2012-08-03T08:26:08.630 回答
4

这也应该有效:

if (args.Length < 1)
{
    //no args passed
}
于 2012-08-03T08:27:18.543 回答
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
}
于 2017-11-06T15:47:41.980 回答
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# 才会评估第二个条件。

假设如果您的条件与 as 对齐if(args.Length == 0 || args == null)args成为null,它,它将在第一个条件下抛出异常,尽管第二个条件为真。

这是我们在放置条件时需要牢记的。

于 2019-01-21T13:44:50.203 回答