【问题标题】:Generic List is changed while changing added class members [duplicate]更改添加的类成员时更改通用列表[重复]
【发布时间】:2015-10-12 12:46:06
【问题描述】:

我想记录在类中建模的人员数据:

public class PersonModel : ViewModelBase
{
    public string FirstName { get; set; }

    public string LastName { get; set; }

    ...

}

Person 数据在运行时被修改并定期历史记录:

public MainViewModel() {
    List<PersonModel> histItem = new List<PersonModel>();
    PersonModel item = new PersonModel();
    item.FirstName = "Vorname 1";
    histItem.Add(item);
    item.FirstName = "Vorname 2";
    histItem.Add(item);
}

当我更改item(如倒数第二行)histItem 也更改了

histItem[0].FirstName = "Vorname 2";

当我第二次将item 添加到histItem 时,我有两个重复的列表实体。集合具有相同的行为。

我希望将“项目”存储为持久的、以后不可更改的快照。

【问题讨论】:

  • 您必须实际制作其当前状态的快照。您将 references 添加到同一个对象两次,并同时修改该对象,这将覆盖以前的更改。正如您已经注意到的那样,这不起作用。所以你需要一个快照机制。
  • 每次都要新建一个项目:item = new PersonModel();

标签: c# list collections


【解决方案1】:

这样使用:

 List<PersonModel> histItem = new List<PersonModel>();
 PersonModel item = new PersonModel();
 item.FirstName = "Vorname 1";
 histItem.Add(item);
 item = new PersonModel();
 item.FirstName = "Vorname 2";
 histItem.Add(item);

 histItem.Add(new PersonModel(){FirstName="value 1"});
 histItem.Add(new PersonModel() { FirstName = "value 2" });

【讨论】:

  • 这种方法的一个问题是,通常只有少量数据可能会改变,因此可能不建议每次都创建一个新实例。
  • 非常感谢您的快速回答。对不起,我不知道这个问题已经被问过了。每次创建新实例时都有一个更大的问题:数据丢失了。 “PersonModel”类很大(包含大约 100 个成员和多个其他通用列表),上面只打印了一小部分。每次创建新实例时,新实例(项目)都需要按成员填充数据。 “PersonModel”类可能会更改。这个问题没有其他解决方案吗?还有其他想法吗?
  • 对不起,'inbox me' 是什么意思?
  • 发送详细信息到我的邮箱,text2meanytime@gmail.com
猜你喜欢
  • 1970-01-01
  • 2020-01-21
  • 2021-04-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多