List实体集合更改任意Model中某一个字段的值,其他Model值也一起变了,引用类型和值类型的问题

来源:互联网 发布:c语言产生0 9的随机数 编辑:程序博客网 时间:2024/05/01 20:41

工作中遇到这么一个问题,现在有一个Model,我需要将该Model变为两个Model并且放入List集合当中去,这两个Model完全一样,但是其中某个字段的值不一样,经过直接赋值我们发现整个List中所有Model的那个字段值都变成一样的了,并没有修改成功,因此设计到了引用类型和值类型的问题,此处用clone方法解决。


例如:

List<Model> modelList = new List<Model>();

Model contentModel = new Model();  //contentModel.ID=0

foreach(string id in idList)    // idList(1,2,3)

{

Model model = new Model();

        model = contentModel ;

model.ID = id;

       modelList .Add(model);

}

// modelList[0].ID = 3    modelList[1].ID = 3   modelList[2].ID = 3

这里发现id并没有赋值到每一个对应的实体当中,而是List中所有Model该字段的值都变成一样的了


解决方法:

1.在实体类中,我们实现ICloneable     public class contentModel: ICloneable

2.在实体类中,加上Clone方法  

 public object Clone()
{
       return MemberwiseClone();
}

3.将要修改字段的实体进行克隆

Model model = (Model)contentModel.Clone();

4.此时再次赋值,就可以啦

foreach(string id in idList)

{

Model model = (Model)contentModel.Clone();

        model = contentModel ;

model.ID = id;

       modelList .Add(model);

}

// modelList[0].ID = 1    modelList[1].ID = 2   modelList[2].ID = 3


0 0
原创粉丝点击