Dart 具有列表的空感知运算符

Dart 具有列表的空感知运算符,dart,Dart,在Dart中,与?运算符结合使用的方法的空感知运算符不能正常工作 具有如下呼叫链的图像: object.getter.getter.getter.getter 现在,当对象可以为空且我不希望出现异常时,我必须编写以下代码: object?.getter?.getter?.getter?.getter 这是对每个getter的null检查,即使只有对象可以为null,但是getter显然不起作用 我同意这一点。但现在我有一个场景,如果为null,我想返回另一个值,但我正在处理一个列表: lis

在Dart中,与
运算符结合使用的方法的空感知运算符不能正常工作

具有如下呼叫链的图像:

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检查,请感谢Kotlin
List.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