C# Interop Outlook Contacts не перебирает все элементы - PullRequest
0 голосов
/ 12 марта 2020

Я хочу удалить все контакты Outlook с идентификатором клиента. Поэтому я подумал, что было бы легко получить все контакты с Interop, пройти через них и проверить, есть ли у них CustomerID, который я хочу.

Так вот, что я кодировал:

var app = new Application();

var folderContacts = app
  .ActiveExplorer()
  .Session
  .GetDefaultFolder(OlDefaultFolders.olFolderContacts);

var searchFolder = folderContacts.Items;

foreach (ContactItem foundContact in searchFolder)
    if (foundContact.CustomerID == myCustomerIdAsString)
        foundContact.Delete();

Это получает все контакты, но моя проблема в том, что он не проходит через все элементы. Посмотрите на это изображение:

My Code after Executing

Вы можете видеть, что оно перебирает примерно половину элементов. Но я не знаю почему.

Кто-нибудь знает, что делать?

1 Ответ

0 голосов
/ 13 марта 2020

Как написал Yo sh в своем комментарии, элементы searchFolder мутируют в самой итерации. Из-за этого я помещаю энтитис в коллекцию и удаляю их после итерации Я хочу удалить все контакты Outlook с CustomerID. Поэтому я подумал, что было бы легко получить все контакты с Interop, пройти через них и проверить, есть ли у них CustomerID, который я хочу.

Так вот, что я кодировал:

var app = new Application();

var contacts = new List<ContactItem>();

var folderContacts = app
  .ActiveExplorer()
  .Session
  .GetDefaultFolder(OlDefaultFolders.olFolderContacts);

var searchFolder = folderContacts.Items;

foreach (ContactItem foundContact in searchFolder)
    if (foundContact.CustomerID == myCustomerIdAsString)
        contacts.Add(foundContact);

contacts.ForEach(x => x.Delete());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...