0

我被這個困擾。我有一個C#應用程序,我需要有一個備份,然後修改我的主要聯繫人。但似乎該副本,無論如何都存在。我通過目測檢查Outlook中我的內容文件夾的內容來驗證這一點。Outlook對象模型ContactItem不會刪除

我有一個簡單的測試情況是這樣的...

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年。發生了什麼?

編輯:解決方法:如果我創建新的聯繫人,並從原來的填充,我可以刪除它就好了。

+0

你試試我的答案? – JimmyPena

+0

嗨JP,因爲我找到了我的解決方法,所以我沒有重新討論過這個問題。它仍然處於劣勢,只是不是一個高度優先事項。當我再次檢查問題時,我會嘗試您的回答並作出相應的回覆。 – Jahmic

回答

0

我不熟悉C#的語法,但我懷疑這是因爲你在創建副本添加到項目集合。我這樣做:

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#語法)。它必須是一個後向循環。

如果這不起作用,則創建一個副本並將其添加到另一個聯繫人文件夾,這樣它就不會干擾您正在使用的文件夾的Items集合。這與你已經在做的事情類似。