Dart 列表的深度复制扩展<;T>;飞镖

Dart 列表的深度复制扩展<;T>;飞镖,dart,Dart,我试图使用扩展方法在Dart中制作列表的深度副本。但我得到了一个错误: The argument type 'List<dynamic>' can't be assigned to the parameter type 'T'. 无法将参数类型“List”分配给参数类型“t”。 代码: 扩展列表列表列表扩展{ 列表获取浅克隆{ 列表res=[]; for(本节中的变量元素){ 如果(元素列表){ res.add(浅克隆元素); } 否则{ 决议增补(要素); } } 返回res;

我试图使用扩展方法在Dart中制作列表的深度副本。但我得到了一个错误:

The argument type 'List<dynamic>' can't be assigned to the parameter type 'T'.
无法将参数类型“List”分配给参数类型“t”。
代码:

扩展列表列表列表扩展{
列表获取浅克隆{
列表res=[];
for(本节中的变量元素){
如果(元素列表){
res.add(浅克隆元素);
}
否则{
决议增补(要素);
}
}
返回res;
}
}

另一种方法也复制列表的类型参数:

列表上的扩展列表克隆{
列表克隆(){
var copy=this.toList();
列表非类型复制=复制;
对于(var i=0;i
这将创建一个与原始元素类型相同的新列表(使用使用实际类型的
toList
)。 然后它检查每个元素是否是一个列表,如果是这样的话,它会克隆它。然后使用不可靠的协方差将克隆重新分配给运行时类型检查,这应该会成功,因为克隆与原始元素具有相同的类型

例如:

//包含列表的列表包含列表
变量列表=[[1]];
//同上!
var clone=list.clone();
extension ListExtensions<T> on List<T> {
  List<T> get shallowClone {
    List<T> res = [];
    for (var elem in this) {
      if (elem is List<dynamic>) {
        res.add(elem.shallowClone);
      }
      else {
        res.add(elem);
      }
    }
    return res;
  }
}