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

C# 如何将一个空参数传递给主类?,c#,visual-studio,parameters,console-application,C#,Visual Studio,Parameters,Console Application,下面的示例代码从cmd获取两个字符串参数,例如 c:\myprogram.exe bobby henn 输出 first name is bobby last name is henn 但当我只传递一个参数时,即使我在if中指定了长度,它也会给我一个错误 c:\myprogram.exe bobby 未处理的异常:System.IndexOutOfRangeException:索引为 在数组的边界之外。at command.Program1.Main(字符串[]) args) 使用系统;

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

c:\myprogram.exe bobby henn
输出

first name is bobby
last name is henn
但当我只传递一个参数时,即使我在if中指定了长度,它也会给我一个错误

c:\myprogram.exe bobby 
未处理的异常:System.IndexOutOfRangeException:索引为 在数组的边界之外。at command.Program1.Main(字符串[]) args)

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Runtime.CompilerServices;
使用系统文本;
名称空间命令
{
公共课程
{
公共空白本(字符串bobby,字符串x)
{
如果(bobby==null | x.长度<1)
{
WriteLine(“空值,传递任何参数”);
}
其他的
{
Console.WriteLine(“名字是”+bobby);
Console.WriteLine(“姓氏为”+x);
Console.ReadLine();
}
}
}
班级计划1
{
静态void Main(字符串[]参数)
{
程序glb=新程序();
glb.ben(bobby:args[0],x:args[1]);
}
}
}
还有没有其他方法可以代替bobby:args[0],x:args[1]

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)

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

关于第二个问题,您可以使用EnvironmentGetCommandLineArgs(),但这将返回一个字符串数组。

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

glb.ben(bobby:args[0],x:args[1]);
可以简化为

glb.ben(args[0],args[1]);
如果希望以不同的顺序传递参数,则可以使用

glb.ben(x:args[1], bobby:args[0]);
您可以使用
System.Linq
中的扩展方法,而不是方括号运算符:

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

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

您必须检查有多少参数传递到
Main
。如果只有一个,则必须使用
string.Empty
null
@Danieboy调用
ben
:这与传递null参数无关-这是数组边界异常的问题-只能通过检查参数数量来解决。虽然在您的情况下不是问题,命名参数对性能的影响很小-编译器为命名参数生成临时变量,然后按照正确的顺序使用临时变量来实际调用方法。
glb.ben(bobby:args.ElementAtOrDefault(0), x:args.ElementAtOrDefault(1));