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; 

場合

私はそうのような単純なテストケースを持っている...、それはエラーが発生します。 削除されたアイテムフォルダに移動しようとしましたが、運がありません。 Outlook 2010.何が起こっているのですか?

EDIT:回避策:私は新しい連絡先を作成し、元から移入した場合、私はうまくそれを削除することができます。

+0

あなたは私の答えを試しましたか? – JimmyPena

+0

こんにちは、私は私の回避策を見つけたので、私はこの問題を再訪していません。それはバックバーナーで、まだ優先順位は高くはありません。問題をもう一度チェックアウトすると、私はあなたの答えを試し、それに応じて返答します。 – Jahmic

答えて

0

私はC#構文に慣れていないんだけど、私はあなたがコピーを作成するときにItemsコレクションに追加されているからだと思います。 ContactItemsの数を確認し、foreachループの開始前に

:私はこれを行うだろう

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

コピーを作成した後、再びContactItems.Countを確認してください。それが増加している場合は、あなたのループをforeachループの代わりに "For i = ContactItems.Count to 1 Step -1"ループに変更する必要があります(申し訳ありません、私はVB構文しか知りません。同等のC#構文)。それは後方のループでなければなりません。それでも解決しない場合は

、そして、それはあなたが作業しているフォルダのItemsコレクションに干渉しない、そのようにコピーを作成し、別の連絡先フォルダに追加します。それはあなたがすでにやっていることに似ています。