List實體集合更改任意Model中某一個欄位的值,其他Model值也一起變了,引用型別和值型別的問題
工作中遇到這麼一個問題,現在有一個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