gpt4 book ai didi

flutter - Dart 中 List.from() 和 as List 的区别

转载 作者:行者123 更新时间:2023-12-04 07:45:25 27 4
gpt4 key购买 nike

我已经从 Firebase 读取了一个快照,并试图从一个字符串列表的节点中提取值。
当我这样做时:

List<String> answers = snapshot.value["answers"] as List<String>;
有了上面的我得到一个运行时错误说:

type 'List<dynamic>' is not a subtype of type 'List<String>' in type cast


但不知何故,下面的这两种方法都有效:
List<String> answers = List<String>.from(snapshot.value["answers"])
或这个:
List<String> answers = snapshot.value["answers"].cast<String>()
第一个和其他两个构造之间有什么区别,为什么我不能转换 List<dynamic>List<String>as类型转换操作?

最佳答案

我们来看一些例子:

var intList = <int>[1, 2, 3];
var dynamicList = intList as List<dynamic>; // Works.
var intList2 = dynamicList as List<int>; // Works.
但:
var dynamicList = <dynamic>[1, 2, 3];
var intList = dynamicList as List<int>; // Fails at runtime.
有什么不同?
在第一个示例中, intList有一个静态类型 List<int> ,对象的实际运行时类型也是 List<int> . dynamicList有一个静态类型 List<dynamic>但实际运行时类型为 List<int> (它与 intList 是同一个对象)。由于对象最初是 List<int> ,这是不可能的 List反对持有任何东西,但 int元素,然后转换回 List<int>是安全的。
在第二个示例中, dynamicList有一个静态类型 List<dynamic>和实际运行时类型 List<dynamic> .由于对象最初构造为 List<dynamic> , 非 int s 元素可以添加到其中,并强制转换为 List<int>不一定安全。因此,您必须单独转换每个元素,这正是 List.fromList.cast做。

关于flutter - Dart 中 List<String>.from() 和 as List<String> 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67221824/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com