C# 如何将一个空参数传递给主类?
下面的示例代码从cmd获取两个字符串参数,例如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) 使用系统;
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));