如何解决用户创建的 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;