Dart 具有列表的空感知运算符
在Dart中,与Dart 具有列表的空感知运算符,dart,Dart,在Dart中,与?运算符结合使用的方法的空感知运算符不能正常工作 具有如下呼叫链的图像: object.getter.getter.getter.getter 现在,当对象可以为空且我不希望出现异常时,我必须编写以下代码: object?.getter?.getter?.getter?.getter 这是对每个getter的null检查,即使只有对象可以为null,但是getter显然不起作用 我同意这一点。但现在我有一个场景,如果为null,我想返回另一个值,但我正在处理一个列表: lis
?
运算符结合使用的方法的空感知运算符不能正常工作
具有如下呼叫链的图像:
object.getter.getter.getter.getter
现在,当对象
可以为空且我不希望出现异常时,我必须编写以下代码:
object?.getter?.getter?.getter?.getter
这是对每个getter的null检查,即使只有对象
可以为null,但是getter
显然不起作用
我同意这一点。但现在我有一个场景,如果为null,我想返回另一个值,但我正在处理一个列表:
list[index][index][index]
如何在列表getter上使用空感知运算符?
这不起作用:
对于Dart中的列表
,这是不存在的
我想实现这样的目标:
我知道只有列表
将永远为空
此长代码将起作用:
list == null ? 0 : list[index][index][index]
索引运算符(
[]
)没有空感知运算符
您可以改用elementAt()
:
list?.elementAt(index)?.elementAt(index)?.elementAt(index) ?? 0
更新-2021/05/24
如果您使用的是空安全设置,现在可以使用:
list?[index]?[index]?[index] ?? 0
这就是我一直在寻找的。我不得不说,我发现自己很难为Dart研究这些答案。旁白:是否也有类似于异常感知操作符的东西?因为在
列表
上,索引可能超出范围,并且它不会返回null
,但会引发异常。不,没有异常感知运算符。您必须使用try catch
。您可以自己创建一个函数来捕获异常并返回null
T异常软件(T function()f){try{return f();}catch({return null;})
并像var result=exceptionAware(()=>list[index][index][index]那样使用它??0;
。虽然我不认为这样做是个好主意;-)不,elementAt(index)?。
只有当index
处的元素是null
值时才有用。最后,我在你的评论中使用exceptionAware
:val url=exceptionAware(()=>list?.first?.url)
;要仅在一行代码中获取值而不进行if检查,请感谢KotlinList.firstOrNull
扩展函数启发的另一种解决方案:///返回第一个元素,如果列表为空,则返回null
。T firstOrNull(List List List List){if(List.isEmpty){return null;}else{return list.first;}}
list == null ? 0 : list[index][index][index]
list?.elementAt(index)?.elementAt(index)?.elementAt(index) ?? 0
list?[index]?[index]?[index] ?? 0