我有两个ICollection
列表fullList
和displayList
。
private void method()
{
if(condition != null) {
displayList.Clear();
if(fullList.Count() > 0)
{
displayList.ClearAndAddRange(
fullList.Where(x=>x.conditionID == condition.conditionID));
}
}
}
我目前面临的问题是每当我更新displayList
中的某个值时,fullList
也会更新。这是预期的行为吗?
修改它的最佳方法是什么,以便它们不会在两者之间共享引用?
答案 0 :(得分:1)
这确实是预期的行为。请考虑以下两个列表:
var list1 = new[] { myObj1, myObj2 };
var list2 = list1;
list2[0].myProp = 3;
其中myObj1
和myObj2
是MyClass
的实例。
由于list1
和list2
共享对包含对象的相同引用,对这些项目中的任何项目所做的所有修改也将反映在另一个列表中。当你想避免这种行为时,你必须提供一个深层拷贝,它将创建一个对象的新实例:
var list2 = list1.Select(x => new MyClass { ... });
有关深度克隆的详细信息,请参阅this post。