我正在一个项目上,想检查列表元素是否为空。例子
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处的元素不存在。不幸的是,上面的代码给了我一个错误。
如何检查列表元素是否不存在并返回默认值
答案 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