C# Outlook удалить все встречи

Microsoft.Office.Interop.Outlook.Application outlookApp = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.MAPIFolder calendarFolder = outlookApp.Session.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderCalendar);

Console.WriteLine(calendarFolder.Items.Count);

foreach (Microsoft.Office.Interop.Outlook.AppointmentItem c in calendarFolder.Items)
{

        Console.WriteLine(c.Subject.ToString() + " " + c.Start.ToString() + " deleted");

        c.Delete();

}

Это удаляет встречи, но только по частям за раз, если вы продолжаете повторно запускать это, в конечном итоге они удаляются все...

кто-нибудь знает, что происходит, я также пытался сначала отсортировать, без изменений -

Спасибо!!

после экспериментов, петля назад сделала это - не совсем понимаю, почему, однако

   Console.WriteLine(calendarFolder.Items.Count);
   Microsoft.Office.Interop.Outlook.Items calendarItems = calendarFolder.Items;
   //Microsoft.Office.Interop.Outlook.AppointmentItem app = calendarItems as  Microsoft.Office.Interop.Outlook.AppointmentItem;

   //for (int i = 1; i <= calendarFolder.Items.Count; i++)
   for (int i = calendarFolder.Items.Count; i > 0; i--)
    {
        calendarFolder.Items[i].Delete();

        //app = calendarFolder.Items[i];
        Console.WriteLine(i);
        //app.Delete();
    }

person Scott Kramer    schedule 27.09.2010    source источник
comment
Вы пытались выполнить цикл в обратном направлении через calendarFolder.Items с помощью цикла for? Даже если это не решит вашу проблему, это может дать подсказки для дальнейшей отладки.   -  person Jay    schedule 27.09.2010
comment
Возникает ли эта проблема, если вы делаете два цикла foreach? То есть в первом цикле скопируйте все AppointmentItems в массив; во втором цикле удалите AppointmentItems.   -  person    schedule 27.09.2010


Ответы (1)


Это причина того, что петля назад исправила это. Допустим, у вас есть 100 элементов в списке, вы проверяете условие цикла for каждый раз, когда выполняете итерацию.

i = 0 count = 99
i = 1 count = 98
      ...
i = 50 count = 49

Цикл for заканчивается, но элементы 50-99 все еще будут существовать, поэтому итерация в обратном направлении не вызывает ошибку.

person Ignacio    schedule 19.01.2011