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
相关产品推荐
相关产品推荐

