ICollection ClearAndAddRange 共享参考?

ICollection ClearAndAddRange share reference?

我有两个 ICollection 列表 fullListdisplayList

private void method()
{
    if(condition != null) {
        displayList.Clear();
        if(fullList.Count() > 0)
        {
            displayList.ClearAndAddRange(
                           fullList.Where(x=>x.conditionID == condition.conditionID));

        }
    }

}

我目前面临的问题是每当我更新 displayList 中的某些值时,fullList 也会更新。这是预期的行为吗?

最好的修改方法是什么,这样他们就不会在两者之间共享引用?

这确实是预期的行为。考虑以下两个列表:

var list1 = new[] { myObj1, myObj2 };
var list2 = list1;

list2[0].myProp = 3;

其中 myObj1myObj2MyClass 的实例。

由于 list1list2 共享对包含对象的相同引用,对任何这些项目所做的所有修改也将反映在另一个列表中。当你想避免这种行为时,你必须提供一个深层副本,它将创建一个全新的对象实例:

var list2 = list1.Select(x => new MyClass { ... });

有关深度克隆的更多信息,另请参阅 this post