首页 > 解决方案 > 如何处理无效值:有效值范围为空使用?操作员

问题描述

var items = [];
var index = 0;
var value = items[index]; // returns invalid value error, understood!

我宁愿使用以下来防止错误

if (index < items.length) {
  value = items[index];
}

由于 Dart 中有?运算符,我想知道有什么方法可以做类似的事情:

var value = items?.[0] ?? -1; 
var value = items?[0] ?? -1;

标签: dart

解决方案


No.?用于null感知运算符(或三元运算符)。访问 a 的无效元素List会引发异常而不是返回 null,因此可识别 null 的运算符对您没有帮助。

如果你愿意,你可以添加一个辅助函数并使其作为扩展更方便:

extension ListGet<E> on List<E> {
  E get(int index, [E defaultValue]) =>
      (0 <= index && index < this.length) ? this[index] : defaultValue;
}

现在你应该可以做

var value = items.get(0, -1);

推荐阅读