如何忽略IndexOutOfRangeException异常,实现访问越界时跳过报错继续执行?
实现忽略索引越界异常的两种方案
你原有代码的逻辑存在问题:C# 中字符串索引从0开始计数,长度为5的字符串"12345"有效索引范围是0~4,直接访问a[5]会直接触发IndexOutOfRangeException,不会执行你写的==null判断。可以通过以下两种方式实现需求:
- 方案1:提前做边界校验(优先推荐)
在访问索引前先判断目标索引是否处于合法范围,无需依赖异常捕获,性能开销极低,适合循环高频执行的场景,示例代码如下:
string a = "12345"; int targetIndex = 5; // 先校验索引合法性 if (targetIndex >= 0 && targetIndex < a.Length) { char currentVal = a[targetIndex]; // 索引合法时的业务逻辑 } else { // 索引越界,直接跳过进入下一轮循环 continue; }
- 方案2:捕获指定类型异常
如果业务场景无法提前做边界校验,可以用try-catch块包裹可能触发异常的代码,捕获到IndexOutOfRangeException后直接执行跳过逻辑,示例代码如下:
string a = "12345"; try { char currentVal = a[5]; // 正常业务逻辑 } catch (IndexOutOfRangeException) { // 捕获到索引越界异常,直接进入下一轮循环 continue; }
注意:异常捕获会产生额外的性能开销,高频调用场景下性能远低于提前边界校验,非必要场景不推荐使用。
内容的提问来源于stack exchange,提问作者Maxim Levashov
相关产品推荐
相关产品推荐

