我创建了一个简单的应用程序来通知用户正在发生的事情。它由一个按钮组成,当命令行传递给它时,它将显示为按钮的text属性。我想要完成的是,如果没有指定命令行参数,它将显示默认消息。我是C#的新手所以要温柔......这就是我到目前为止所拥有的。
private void Form1_Load(object sender, EventArgs e)
{
string[] passedinargs = Environment.GetCommandLineArgs();
if (passedinargs == null)
{
btnNotify.Text = "Please Start from Command Line";
}
else
{
btnNotify.Text = passedinargs[1];
}
运行时,会给出此执行:
Notify.exe中出现未处理的“System.IndexOutOfRangeException”类型异常
突出显示btnNotify.Text = passedinargs[1];
。
有什么建议吗?
答案 0 :(得分:4)
我想要完成的是,如果没有指定命令行参数,它将显示默认消息。
这表明您应该使用Length
属性检查参数的长度。如下所示:
private void Form1_Load(object sender, EventArgs e)
{
string[] args = Environment.GetCommandLineArgs();
btnNotify.Text = args.Length < 2
? "Please provide an argument on the command line"
: args[1]; // First command-line argument.
}
我非常确定Environment.GetCommandLineArgs()
永远不会返回null。如果你发现它,你可以在条件中使用args == null || args.Length < 2
。
答案 1 :(得分:1)
passinargs 是一个可能包含1个或多个元素的数组。 第一个元素( passedinargs [0] )始终是可执行文件名,其余(0或更多)是剩余的命令行参数。 如果要使用 passedinargs [1] (这是可执行文件名后的第一个命令行参数),则需要通过选中来验证它是否存在 passedinargs.Length 强>
所以,我的建议是修改你的条件和查询:
if (passedinargs == null || passedinargs.Length < 2)
{
btnNotify.Text = "Please Start from Command Line";
}
...