为何仅在值非空时打印仍触发RangeError?附代码及报错
问题解析与解决方案
你遇到的问题根源在于:Dart中直接访问列表超出范围的索引时,不会返回null,而是直接抛出RangeError,所以??运算符根本没机会触发——代码在执行到nums[10]时就已经报错中断了。
两种可行的解决方法:
方法1:先判断索引有效性
手动检查索引是否在列表的合法范围内(0 <= index < nums.length),再决定访问哪个元素:
List nums = [1, 2, 3]; int targetIndex = 10; print(targetIndex >= 0 && targetIndex < nums.length ? nums[targetIndex] : nums[0]);
方法2:使用elementAtOrNull方法(推荐)
Dart 2.13及以上版本提供了elementAtOrNull方法,当索引越界时会返回null,这样就能正常配合??运算符使用:
List nums = [1, 2, 3]; print(nums.elementAtOrNull(10) ?? nums[0]);
内容的提问来源于stack exchange,提问作者Abel
相关产品推荐
相关产品推荐

