首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否在Dart列表中识别空的.firstWhere、.singleWhere、.lastWhere?

是否在Dart列表中识别空的.firstWhere、.singleWhere、.lastWhere?
EN

Stack Overflow用户
提问于 2021-09-13 10:49:16
回答 2查看 659关注 0票数 2

我经常在我的项目中使用.firstWhere((E element) -> bool) -> E。在移植它以支持空安全性时,我不能很好地处理在List实例中找不到元素的情况。

.firstWhere.singleWhere.lastWhere返回E,而不是E?,所以当处理列表不包含必需元素的情况时,除了从eg转换整个列表之外,没有其他方法可以返回nullList<String> to List<String?>,这使得测试函数担心每个元素都可能为空,而这不可能是空的。在空安全之前,我只能使用orElse: () => null,但是在空安全的情况下,orElse必须返回E类型的元素,因此需要进行麻烦的强制转换。

我是否必须在orElse中使用每个类型都有一个null替代,或者是否有其他方法来使列表检查支持带有null的缺失元素场景?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-13 13:31:03

您可以只使用firstWhereOrNull,它应该可以完全按照您的预期工作。

票数 7
EN

Stack Overflow用户

发布于 2021-09-13 13:12:38

解决方案是在Iterable类型上创建一个扩展:

代码语言:javascript
运行
复制
extension IterableModifier<E> on Iterable<E> {
  E? firstWhereOrNull(bool Function(E) test) =>
      cast<E?>().firstWhere((v) => v != null && test(v), orElse: () => null);
}

然后像这样使用它:

代码语言:javascript
运行
复制
final myList = <String?>['A', 'B', null, 'C'];
String? result = myList.firstWhereOrNull((e) => e == 'D');
print(result); // output: null
  
result = myList.firstWhereOrNull((e) => e == 'A');
print(result); // output: "A"

Try the full example on DartPad

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69161378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档