飞镖列表元素中感知为空

时间:2019-10-21 12:05:29

标签: dart

我正在一个项目上,想检查列表元素是否为空。例子

select t.*,
       concat(col1,
              (case when col2 = 1 then '' else col2 - 1 end)
             ) as col4
from t;

但是,如果我想打印出列表元素,如果不存在该元素,则使用dart null-aware打印出默认数字怎么办。例子

List<int> i = [1, 2, 3];
print(i[1]); // this prints 2

我希望它打印出15,因为索引10处的元素不存在。不幸的是,上面的代码给了我一个错误。

如何检查列表元素是否不存在并返回默认值

2 个答案:

答案 0 :(得分:1)

没有一种优雅的方法可以做到。 您将必须首先检查列表长度,因为在程序评估i.elementAt(10)时,它会立即抛出RangeError异常。

示例解决方案1:

if (i.length > 9) { 
    print(i?.elementAt(10));
} else {
    print(15);
}

示例解决方案2(一种更为优雅的方式):

print(i.length > 9 ? i?.elementAt(10) : 15);

答案 1 :(得分:1)

具有这种功能的一种解决方案是用自定义类包装列表,该类捕获内部异常并返回null。

我写了这个包装器波纹管,并将其命名为XList:

class XList<E> {
  List<E> list;
  XList(this.list);
  E operator [](int position) {
    try {
      return list[position];
    } catch(IndexOutOfBoundException) {
      return null;
    }
  }
}

现在您的代码如下:

final list = [1, 2, 3];
final a = XList(list);
print(a[10] ?? 15);
// prints 15