0

我对此感到困扰。我有 ac# 应用程序,我需要在修改我的主要联系人之前进行备份。但似乎无论如何,副本都会留下来。我正在通过在 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。发生了什么?

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

4

1 回答 1

0

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

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

Items ContactItems = Folder2.Items;
' display ContactItems.Count here, is it Console.WriteLine(ContactItems.Count) ??

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

如果这不起作用,则创建一个副本并将其添加到另一个联系人文件夹,这样它就不会干扰您正在使用的文件夹的项目集合。这类似于您已经在做的事情。

于 2011-08-30T17:34:33.737 回答