我还是编程的新手,所以每次我得到一个exeption,我都会尝试重写代码,这样就可以避免了。但是在这种情况下,我认为没办法解决它。
我有一个用户用来输入命令的文本框。然后在第一个空格后分割字符串(输入)。
private void tbxMainImput_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
string commandText = tbxMainImput.Text.ToLower();
string[] commandTextSplitted = commandText.Split(new char[] { ' ' }, 2, StringSplitOptions.RemoveEmptyEntries);
ReadTextboxImput(commandTextSplitted);
tbxMainImput.ResetText();
e.SuppressKeyPress = true; //anoying beep is removed :)
}
}
这个拆分字符串commandTextSplitted正被切换方法ReadTextboxImput
使用 private void ReadTextboxImput(string[] imput)
{
switch (imput[0])
{
//some other cases
case "attack":
StartCombat(imput[1]); //trows exeption if user only types one word
break;
}
}
如果玩家只输入一个单词,则输入[1]不存在,并且会抛出IndexOutOfRange异常(应该如此)。然而这个例子似乎是不可避免的。玩家可以输入一个单词并按回车键...
所以我一直在尝试一些东西来检查代码,然后突破代码,但它似乎没有用。 msdn网站并不是初学者友好的,我在stackoverflow上发现了所有人都要求查找错误来源的地方。我知道的女巫。
到目前为止,我已尝试过:
case "attack":
if (imput[1] == null) //(imput[1] == system.IndexOutOfRange) doesnt make sense but i had to try
{
rtbOutput.AppendText("Yes yes. Attack nothing...");
break;
}
StartCombat(imput[1]);
break;
我制作了一个使用try和catch工作的方法,但它只是检测到了错误,我无法对它做任何事情(比如返回假,或其他东西)
任何帮助都会被贬低。
答案 0 :(得分:1)
您可以检查数组长度是> 1
而不是imput[1] == null
if (imput.Length > 1){
rtbOutput.AppendText("Yes yes. Attack nothing...");
break;
}
StartCombat(imput[1]);
break;