【发布时间】:2012-09-07 12:42:09
【问题描述】:
我想删除集合中的所有元素,因为我没有看到 .RemoveAll 或类似的东西,所以我使用下面的代码。
int number = addressBook.Items.Count;
System.Collections.IEnumerator enumerator = ...
while (enumerator.MoveNext())
{
target = enumerator.Current as Outlook.ContactItem;
target.Delete();
}
但是,我注意到集合中剩余元素的数量大约是程序每次运行的一半。我的结论是.Delete() 自己跳到下一个元素,这意味着循环条件中的.MoveNext() 跳到下一个元素之后。
所以我尝试如下重置枚举器。
int number = addressBook.Items.Count;
System.Collections.IEnumerator enumerator = ...
while (enumerator.MoveNext())
{
target = enumerator.Current as Outlook.ContactItem;
target.Delete();
enumerator.Reset();
}
但是,当我检查.Count 时,我看到在删除最后一个元素并重置枚举器之后,剩余的元素数仍然为 1。当然,我遇到了一个例外。
我在这张照片中遗漏了什么?我知道这不是错误,因为 会在很久以前报告并解决...
【问题讨论】:
-
你为什么不简单地使用
foreach循环??? -
@Jon 这不是你想的那样的集合。这是一个 Outlook 故事。我正在尝试删除联系人,但它与我作斗争。
-
@Tigran 代码中的第 1 行。
addressBook.Items.Count. -
@Jon - 你不能修改你用
foreach循环循环的集合。 -
附带说明,不确定它是否重要,但是... msdn.microsoft.com/en-us/library/… "要删除文件夹的 Items 集合中的所有项目,您必须删除每个项目从最后一个开始文件夹中的项目。”
标签: c# ienumerable