如何解决预期值为'List <int>'类型的值,但得到了'WhereIterable <int>'类型的值
List<int> filterEvens(List<int> ints) {
var foo = ints.where((n) => n.isEven) as List<int>;
var bar = ints.where((n) => n.isEven).toList();
return foo; // Runtime error
// return bar; // Works
}
void main() {
print(filterEvens([1]));
}
当我在上述函数的第一行中将Iterable
向下转换为List
时,会引发错误:
错误:预期值为“列表”类型,但得到了类型为“ WhereIterable”
解决方法
where
返回一个Iterable
(在您的运行时中,WhereIterable
实现了Iterable
接口)。您的问题是您不能说所有Iterable
都是List
,而是可以说所有List
对象也是Iterable
,因为List
实现了{{ 1}}界面。
因此,由于Dart在运行时检查了类型转换,因此您使用Iterable
进行的类型转换失败了,并且可以告诉as List<int>
与WhereIterable
界面不兼容。
List
可以正常工作,因为它记录为:
创建一个包含此Iterable元素的列表。
https://api.dart.dev/stable/2.9.1/dart-core/Iterable/toList.html
因此,该方法将遍历从toList()
返回的所有元素并创建了一个全新的{{ 1}}对象和元素。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。