如何解决用户创建的 IndexOutOfRange?
How to solve a IndexOutOfRange made by the user?
我对编程还是个新手,所以每次遇到异常我都会尝试重写代码以避免它。但是在这种情况下,我认为没有办法解决它。
我有一个用户用来输入命令的文本框。然后在第一个 space.
之后拆分字符串(输入)
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 :)
}
}
s 方法 ReadTextboxImput
使用此拆分字符串命令 TextSplitted
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;
}
}
如果玩家只输入一个单词,imput[1] 不存在,并且会抛出一个 IndexOutOfRange 异常(这是应该的)。然而,例外似乎是不可避免的。玩家可以输入一个词并按回车键...
所以我一直在尝试一些方法来检查异常,然后突破代码,但它似乎不起作用。 msdn 网站并不是真正的初学者友好网站,我在 Whosebug 上找到的所有内容都要求找到错误的来源。 我知道。
到目前为止我已经尝试过:
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 的方法,但它只是检测到错误,我无法用它做任何事情(比如 return 错误,或其他)
如有任何帮助,我们将不胜感激。
您可以检查数组长度是否为 > 1
而不是 imput[1] == null
if (imput.Length > 1){
rtbOutput.AppendText("Yes yes. Attack nothing...");
break;
}
StartCombat(imput[1]);
break;
我对编程还是个新手,所以每次遇到异常我都会尝试重写代码以避免它。但是在这种情况下,我认为没有办法解决它。
我有一个用户用来输入命令的文本框。然后在第一个 space.
之后拆分字符串(输入) 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 :)
}
}
s 方法 ReadTextboxImput
使用此拆分字符串命令 TextSplitted 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;
}
}
如果玩家只输入一个单词,imput[1] 不存在,并且会抛出一个 IndexOutOfRange 异常(这是应该的)。然而,例外似乎是不可避免的。玩家可以输入一个词并按回车键...
所以我一直在尝试一些方法来检查异常,然后突破代码,但它似乎不起作用。 msdn 网站并不是真正的初学者友好网站,我在 Whosebug 上找到的所有内容都要求找到错误的来源。 我知道。
到目前为止我已经尝试过:
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 的方法,但它只是检测到错误,我无法用它做任何事情(比如 return 错误,或其他)
如有任何帮助,我们将不胜感激。
您可以检查数组长度是否为 > 1
而不是 imput[1] == null
if (imput.Length > 1){
rtbOutput.AppendText("Yes yes. Attack nothing...");
break;
}
StartCombat(imput[1]);
break;