Объектная модель Outlook ContactItem не удалит

Я поражен этим. У меня есть приложение 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;

Если я пытаюсь удалить его дважды, это вызывает ошибку. Даже пытался переместить его в папку удаленных элементов, но не повезло. Outlook 2010. Что происходит?

РЕДАКТИРОВАТЬ: ВРЕМЕННОЕ РЕШЕНИЕ: Если я создаю новый контакт и добавляю данные из оригинала, я могу просто удалить его.

1 ответ

Я не знаком с синтаксисом 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#). Это должна быть обратная петля.

Если это не сработает, создайте копию и добавьте ее в другую папку "Контакты", чтобы она не мешала коллекции элементов папки, с которой вы работаете. Это похоже на то, что вы уже делаете.

Другие вопросы по тегам