【发布时间】:2022-01-04 21:25:49
【问题描述】:
我有一个包含一些用户输入的对象列表。
我想要实现的目标:在将对象重置为其默认值之前复制列表,这样我就不会丢失信息。
问题:无论我怎么尝试,每当我修改list_1中的对象时,list_2中的对象也会被修改;覆盖我想要保留的数据。
尝试解决它:
我尝试以各种方式声明第二个列表:
list_2 = list_1;
list_2 = List.of(list_1);
list_2 = [...list_1);
list_2 = list_1.toList();
没有运气。然后我尝试了这个:
list_2=[];
for (var i in list_1){
list_2.add(i);}
仍然是相同的行为。如果我修改 list_1 中的对象的值,则 list_2 中的相应对象也会更改。
我很困惑。我只是在创建对对象的新引用,而不是实际上将它们相乘吗?我将如何改变它?有其他事情发生吗? 谢谢!
【问题讨论】:
-
您的问题是 在 Dart 中没有制作对象副本的通用方法。
List.of(list_1)、[...list_1]和list1.toList()都将复制list_1但不是包含的对象。您的问题的答案取决于这些对象是什么,而您尚未指定您的Lists 包含哪些对象。 -
对象是我创建的类的实例。它们有两个属性;一个存储字符串(来自 TextField 的用户输入),另一个存储一个整数,如果用户将任务标记为已完成,则该整数进行标记。我的想法是在重置内容时使用该对象来保存信息。 >> 不知道你能不能说出来;)……但我对此很陌生;所以这是我为自己提出的一个培训项目......正是为了遇到这样的问题。
-
您需要遍历原始
list_1并构建一个新的List,为每个元素调用您的类的适当构造函数。向您的类添加clone()方法可以使其更容易,但您需要注意在任何派生类中适当地覆盖它。 -
谢谢!我从来没有听说过 clone() 的东西,所以我需要调查一下……但即使我现在认为这太过分了……我想我可以想出一个办法调用我的类,创建新对象并将它们放入一个新列表中。所以这是一个前进的方向,我理解问题的根本原因......这让我感到困惑。再次感谢。