【发布时间】:2011-09-12 09:51:11
【问题描述】:
问题:
我有以下代码:
foreach(var ItemA in GenericListInstanceB)
{
ItemA.MethodThatCouldRemoveAnyItemInGenericListInstanceB();
}
显然我得到了一个错误。
我想要做的是将GenericListInstanceB 更改为我创建的一个类,该类跟踪它应该删除的项目。然后,当循环完成时,它会将它们全部删除。与添加项目相同。
这很好,我可以创建一个具有内部列表的类,以及要添加的项目和要删除的项目的列表。然后另一个名为AddRemovePendingItems 的方法实际上“更新”了列表(相应地删除和添加项目)。棘手的部分是自动调用该方法。
想法:也许看看GetEnumerator 何时被调用?也许用IDisposable 做点聪明的事?
问题:我如何知道 for 循环何时退出并且我们已经完成了对我的集合类的迭代以便我可以调用我的 AddRemovePendingItems 方法?,尤其是如果循环中断很早?
注意我想避免任何不必要的复制,因为我想消除/最小化垃圾收集,所以我不能只迭代副本/制作新副本或类似的东西。
【问题讨论】:
-
另一个想法:将您要保留的项目复制到另一个通用列表
-
@Jodrell,不幸的是,这对我来说不是一个选项,因为它应该在 Xbox 上运行,我正在尝试删除任何不必要的复制。
-
为什么
ItemA有对GenericListInstanceB的引用? -
@George Duckett:那么你将不得不使用 for 循环,并在删除项目时修改索引。
-
@George - 您将复制引用而不是对象。我认为你不愿意这样做是被误导了。
标签: c# collections ienumerable enumeration