You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决用户输入引发的IndexOutOfRange异常?

解决单个单词输入触发的IndexOutOfRange异常问题

嘿,我太懂这种明明想规避异常却找不到头绪的感觉了!你遇到的这个问题其实是字符串拆分后的数组访问逻辑漏洞——当用户只输入单个单词时,拆分出来的数组只有1个元素,你直接去取input[1]自然就会触发越界异常,而且这个异常完全是可以提前避免的,给你两个实用的解决方案:

方案一:拆分时限制长度+提前检查数组元素数量

首先,建议你用Split方法的重载版本,指定最多拆分成2部分,这样不管用户输入多少个空格,都只会把第一个空格前的内容作为命令,后面的所有内容作为参数(包括带空格的参数),然后在使用第二个元素前先检查数组长度:

// 按首个空格拆分,最多分成2段,保留参数里的空格
var commandTextSplitted = userInput.Split(new[] {' '}, 2);

switch(commandTextSplitted[0])
{
    case "send":
        // 先判断是否有参数
        if(commandTextSplitted.Length > 1)
        {
            // 处理带参数的情况,比如发送commandTextSplitted[1]的内容
            Console.WriteLine($"发送内容:{commandTextSplitted[1]}");
        }
        else
        {
            // 没有参数时给出提示,比如"请输入要发送的内容"
            Console.WriteLine("错误:请输入要发送的内容");
        }
        break;
    case "help":
        // 这个命令不需要参数,直接执行逻辑
        Console.WriteLine("可用命令:send [内容]、help");
        break;
    // 其他命令的处理逻辑
}

方案二:使用Linq的ElementAtOrDefault安全获取参数

如果你习惯用Linq的话,可以用ElementAtOrDefault方法来获取第二个元素,当元素不存在时它会返回默认值(比如字符串的null),这样就不会触发异常:

using System.Linq; // 需要引用这个命名空间

var commandTextSplitted = userInput.Split(' ');
var command = commandTextSplitted[0];
// 安全获取第二个元素,不存在则返回null
var argument = commandTextSplitted.ElementAtOrDefault(1);

switch(command)
{
    case "open":
        if(string.IsNullOrEmpty(argument))
        {
            Console.WriteLine("错误:请指定要打开的文件路径");
        }
        else
        {
            Console.WriteLine($"尝试打开文件:{argument}");
        }
        break;
    // 其他命令处理
}

其实核心思路就是永远不要假设数组一定有你要访问的索引,在使用前先做判断,这样就能从根源上避免这个异常啦!

内容的提问来源于stack exchange,提问作者Korosevar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:15:43