Outlook对象模型ContactItem赢了';不删除

Outlook对象模型ContactItem赢了';不删除,outlook,out-of-memory,outlook-addin,outlook-object-model,Outlook,Out Of Memory,Outlook Addin,Outlook Object Model,我被这件事困扰着。我有一个c#应用程序,在修改我的主要联系人之前,我需要有一个备份。但似乎不管发生什么,副本都会留下来。我正在通过目视检查Outlook中“我的内容”文件夹的内容来验证这一点 我有一个简单的测试用例,就像这样 Application outlookApplication = new Application(); NameSpace outlookNamespace = outlookApplication.GetNamespace("mapi"); outlookNamespac

我被这件事困扰着。我有一个c#应用程序,在修改我的主要联系人之前,我需要有一个备份。但似乎不管发生什么,副本都会留下来。我正在通过目视检查Outlook中“我的内容”文件夹的内容来验证这一点

我有一个简单的测试用例,就像这样

Application outlookApplication = new Application();
NameSpace outlookNamespace = outlookApplication.GetNamespace("mapi");
outlookNamespace.Logon("", "", true, true);
MAPIFolder Folder = outlookNamespace.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
MAPIFolder Folder2 = Folder.Folders["Test1"];
Items ContactItems = Folder2.Items;
foreach (ContactItem Contact in ContactItems)
{
    ContactItem Backup = (ContactItem)Contact.Copy();
    Backup.Delete();
    break;
}
outlookNamespace.Logoff();
outlookNamespace = null;
如果我尝试删除它两次,就会导致错误。 甚至尝试将其移动到“已删除邮件”文件夹,但没有成功。展望2010年。发生了什么事

编辑:解决方法:如果我创建一个新联系人并从原始联系人中填充,我可以很好地将其删除。

我不熟悉C#语法,但我怀疑这是因为您在创建副本时正在向Items集合添加内容。我会这样做:

在开始foreach循环之前,检查ContactItems的计数:

Items ContactItems = Folder2.Items;
' display ContactItems.Count here, is it Console.WriteLine(ContactItems.Count) ??
创建副本后,检查ContactItems。再次计数。如果它增加了,那么您需要将循环更改为“For i=ContactItems.Count to 1 Step-1”类型的循环,而不是foreach循环(对不起,我只知道VB语法,我不知道等效的C#语法)。它必须是一个反向循环


如果这不起作用,那么创建一个副本并将其添加到另一个Contacts文件夹中,这样就不会干扰您正在使用的文件夹的Items集合。这与您已经在做的事情类似。

Hi JP,自从我找到了自己的工作,我就没有再讨论过这个问题。它仍然被搁置,只是不是一个高优先级。当我再次查看该问题时,我将尝试您的答案并相应地答复。