如何将一个空参数传递给主类?

时间:2016-09-22 14:13:49

标签: c# visual-studio parameters console-application

下面的示例代码从cmd获取两个字符串参数,例如

c:\myprogram.exe bobby henn

输出

first name is bobby
last name is henn

但是当我只传递一个参数时,即使我指定了长度(例如

),也会给我一个错误
c:\myprogram.exe bobby 
  

未处理的异常:System.IndexOutOfRangeException:索引是   在数组的边界之外。 at command.Program1.Main(String []   参数)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;

namespace command
{
   public class Program
    {
       public void ben(string bobby, string x)
        {

          if (bobby == null |  x.Length < 1)
            {
                Console.WriteLine("Empty value, pass any parameter");
            }

            else
             {

                Console.WriteLine("First Name is " + bobby);
                Console.WriteLine("Last Name is " + x);
                Console.ReadLine();
            }
        }

    }

    class Program1
    {
        static void Main(string[] args)
        {
         Program glb = new Program();
         glb.ben(bobby:args[0],x:args[1]);
        }
    }

}

还有其他方法可以将参数调用到main方法而不是bobby:args[0],x:args[1]

4 个答案:

答案 0 :(得分:1)

您可以使用System.Linq中的ElementAtOrDefault扩展方法,而不是方括号运算符:

glb.ben(bobby:args.ElementAtOrDefault(0), x:args.ElementAtOrDefault(1));

如果索引超出给定数组的范围,它将返回null,而不是抛出异常。

答案 1 :(得分:0)

static void Main(string[] args)
        {
         Program glb = new Program();

         if(args.length==2) 
         glb.ben(args[0],x:args[1]);
         else
         glb.ben(args[0]);
        }

并改变这个

     public void ben(string bobby, string x = null)

答案 2 :(得分:0)

作为第一步,您应始终清理用户输入。在这种情况下,如果需要两个参数,则可以打印错误消息然后退出。

关于第二个问题,您可以使用EnvironmentGetCommandLineArgs(),但无论如何都会返回一个字符串数组。 https://msdn.microsoft.com/en-us/en-en/library/system.environment.getcommandlineargs(v=vs.110).aspx

答案 3 :(得分:0)

除了检查输入参数数量的答案之外:只要您按照定义的顺序传递参数,那么您不需要使用参数名称前缀

glb.ben(bobby:args[0],x:args[1]);

可以简化为

glb.ben(args[0],args[1]);

如果您想以不同的顺序传递参数,那么您可以使用

glb.ben(x:args[1], bobby:args[0]);