在Dart/Flutter中如何将List<dynamic>转换为List<DateTime>?
问题原因
Dart 中 map 方法的泛型参数默认继承调用方的类型约束:你调用 map 的原数组是 List<dynamic> 类型,未显式指定泛型的情况下,map 返回的迭代器为 Iterable<dynamic> 类型,调用 toList() 后自然得到 List<dynamic>,即使内部转换返回的都是 DateTime 类型,泛型也不会自动向上推断。
解决方案
你可以通过以下几种方式显式指定泛型,得到 List<DateTime> 类型的结果:
- 方案1:给
map方法显式声明返回值泛型(最推荐)
var listDates = list.map<DateTime>((date) => DateTime.parse(date)).toList();
该写法在编译阶段就会做类型校验,类型安全最高、性能最优。
- 方案2:使用
List.from构造方法指定类型
var listDates = List<DateTime>.from(list.map((date) => DateTime.parse(date)));
- 方案3:调用
cast方法做运行时类型转换
var listDates = list.map((date) => DateTime.parse(date)).toList().cast<DateTime>();
该方式仅在运行时做类型校验,性能略低于第一种方案,转换失败会抛出运行时异常。
内容的提问来源于stack exchange,提问作者ivangl
相关产品推荐
相关产品推荐

