Dart中捕获RangeError返回null的最佳实践(单行写法)
Dart处理列表索引越界并返回null的简洁方案
当访问列表索引超出有效范围时,若想返回null替代RangeError未处理异常,以下两种方案比原有的try-catch写法更简洁高效,属于最佳实践:
1. 工具函数调用(单行实现)
先定义通用工具函数,再通过单行代码调用:
// 定义工具函数 T? getListElementOrNull<T>(List<T> list, int index) => index >= 0 && index < list.length ? list[index] : null; // 单行调用 final element = getListElementOrNull(l, index);
2. 扩展方法(更贴合Dart风格)
给List类型添加扩展方法,调用更直观:
// 定义扩展 extension SafeList<T> on List<T> { T? elementOrNull(int index) => index >= 0 && index < length ? this[index] : null; } // 单行调用 final element = l.elementOrNull(index);
关键说明
你提到的final element = l[index] ?? null;写法无法生效——索引越界时会直接抛出RangeError,不会返回null,??运算符没有执行的机会。
另外,不推荐用单行try-catch实现(Dart也无原生单行try语法),异常处理的性能开销远大于提前判断索引合法性,预判断才是这类场景的最优选择。
内容的提问来源于stack exchange,提问作者genericUser
相关产品推荐
相关产品推荐

