Dart类型安全-列表和可编辑

Dart类型安全-列表和可编辑,dart,Dart,在下面的代码中,bar是一个列表,但右侧是一个可伸缩的,因为dart是一种类型安全语言,我希望在构建时中出现错误,但是我有Uncaught错误:TypeError:WhereIterable的实例:“WhereIterable”类型不是“List”类型的子类型 void main(){ 最终列表foo=[1,2,3]; 最终列表栏=foo.where((e)=>e>1); } 我知道添加.toList()修复错误,我的问题是:为什么编译/构建时没有错误?这是因为dart隐式地将Iterable

在下面的代码中,bar是一个
列表
,但右侧是一个
可伸缩的
,因为dart是一种类型安全语言,我希望在构建时中出现错误,但是我有
Uncaught错误:TypeError:WhereIterable的实例:“WhereIterable”类型不是“List”类型的子类型

void main(){
最终列表foo=[1,2,3];
最终列表栏=foo.where((e)=>e>1);
}

我知道添加
.toList()
修复错误,我的问题是:为什么编译/构建时没有错误?

这是因为dart隐式地将Iterable转换为List。这是默认行为。要禁用此功能,应在analyzer设置中打开隐式强制转换,如下所示:

分析器:
强模式:
隐式类型转换:false
更多信息可在以下位置找到:和:

你能解释更多吗?为什么?如果它隐式地将Iterable强制转换为List,为什么会出现运行时错误?因为隐式强制转换只在分析(编译)时工作。它使您有责任决定从“where”中产生的Iterable是否确实是列表。运行程序时,“where”返回WhereIterable,而不是List,因此出现运行时错误