我想知道是否可以像这样将一个列表中的对象添加到另一个列表中:
objectToRemoveList.Add(listOfObjects.ElementAt(i));
然后,我想删除列表中的所有对象,如下所示:
objectToRemoveList.Clear();
我想知道,因为对象似乎还在那里!?
我想知道是否可以像这样将一个列表中的对象添加到另一个列表中:
objectToRemoveList.Add(listOfObjects.ElementAt(i));
然后,我想删除列表中的所有对象,如下所示:
objectToRemoveList.Clear();
我想知道,因为对象似乎还在那里!?
那是行不通的。让我以图形的方式解释它。您的对象存在于内存中的某处:
a b c d
您的列表listOfObjects
仅包含对以下每个对象的引用:
listOfObjects: | | | |
| | | |
v v v v
a b c d
如果您将其中一些项目(比如说b
and d
)添加到objectToRemoveList
,您也只是添加了一个参考:
listOfObjects: | | | |
| | | |
v v v v
a b c d
^ ^
| |
objToRemoveLst: | |
通过执行objectToRemoveList.Clear
,您只是删除了那里的所有引用。请注意如何listOfObjects
完全不受影响:
listOfObjects: | | | |
| | | |
v v v v
a b c d
objToRemoveLst:
要实现您想要做的,您可以使用以下循环:
foreach (object o in objectToRemoveList) {
listOfObjects.Remove(o);
}
这样,引用实际上是从 中删除的listOfObjects
,这就是您想要的:
listOfObjects: | |
| |
v v
a b c d
^ ^
| |
objToRemoveLst: | |
是的,原始列表中的对象将保持不变,因为您要在索引 i 处添加项目的引用。如果您有值类型,那么它将创建一个副本。
listOfObjects.RemoveAt(i)
如果您想从原始列表中的已知索引中删除项目,为什么不这样做呢?
当您从listOfObjects
to添加元素时objectToRemoveList
,您只是将对象的引用添加到您的列表中,而不是对象本身(除非您的列表是值类型,但情况似乎并非如此)。因此,当您使用Clear()
其中一个列表时,另一个列表仍将包含原始项目,因为您没有修改它们。