如何解决用户提出的IndexOutOfRange?

时间:2018-02-19 22:49:53

标签: c# split indexoutofrangeexception

我还是编程的新手,所以每次我得到一个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工作的方法,但它只是检测到了错误,我无法对它做任何事情(比如返回假,或其他东西)

任何帮助都会被贬低。

1 个答案:

答案 0 :(得分:1)

您可以检查数组长度是> 1而不是imput[1] == null

if (imput.Length > 1){
  rtbOutput.AppendText("Yes yes. Attack nothing...");
  break;
}
StartCombat(imput[1]);
break;