Как удалить все DistListItems из MAPIFolder? - PullRequest
0 голосов
/ 09 ноября 2019

Я только что столкнулся со странным поведением из моей надстройки VSTO Outlook. Я пытаюсь удалить все списки рассылки, хранящиеся в папке Outlook.

Вот как я это делаю:

public Outlook.MAPIFolder ListsFolder;

foreach (DistListItem distList in ListsFolder.Items.OfType<DistListItem>())
{
    distList.Delete();
}

Удаляет множество списков, но, как ни странно, не все из них. Некоторые всегда остаются. Насколько я вижу, в них нет ничего особенного. Все списки в этой папке были программно созданы одной и той же надстройкой, например:

myList = ListsFolder.Items.Add(Outlook.OlItemType.olDistributionListItem) as Outlook.DistListItem;

Есть идеи, что я могу делать неправильно?

1 Ответ

0 голосов
/ 10 ноября 2019

Во-первых, никогда не просматривайте все элементы в папке - вы бы не выполнили оператор SELECT SQL без предложения WHERE, не так ли? Используйте Items.Find/FindNext или Items.Restrict - пусть поставщик магазина выполняет фильтрацию. В вашем случае, поисковый запрос будет [MessageClass] = 'IPM.DistList'.

Во-вторых, вы удаляете элементы из коллекции, тем самым изменяя ее - поэтому некоторые элементы всегда пропускаются. Вам нужно либо использовать нисходящий цикл от Count до 1, либо сохранить все идентификаторы записей в списке строк, а затем зациклить этот список, открывая каждый элемент, используя Namespace.GetItemfromID.

...