You need to enable JavaScript to run this app. Dart中List.insert方法行为疑问:插入索引等于列表长度为何不报错?
优惠活动
大模型
产品
解决方案
定价
更多

Dart中List.insert方法行为疑问:插入索引等于列表长度为何不报错?

Dart列表insert操作不越界问题解答

这是Dart语言对List.insert方法的规则设计导致的,和多数人默认认知的索引取值范围不同:
Dart可增长列表的insert(int index, E element)方法对index参数的合法范围要求是 0 ≤ index ≤ 当前列表长度,而非仅0 ≤ index ≤ 当前列表长度-1:

  • 当index < 当前列表长度时,元素会插入到指定下标位置,原下标及之后的元素整体后移一位
  • 当index == 当前列表长度时,效果等价于调用add(element),直接将元素追加到列表末尾,不会触发越界
  • 当index > 当前列表长度或index < 0时,才会抛出下标越界错误

对应你的场景验证:
你调用addAll之后列表长度为3,此时传入index=3刚好等于列表长度,属于合法取值,因此执行成功,效果等价于myList.add(11),最终列表长度变为4,和你的调试输出结果一致。而你调用insert(4, 11)时4>3,超出合法范围,因此触发越界报错,符合预期。

补充示例验证:

void main() {
  var list = [1,2,3]; // 长度为3
  list.insert(3, 4); // 合法,等价于list.add(4)
  print(list); // 输出 [1, 2, 3, 4]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 05:06:03