Исключение надстройки Outlook - Как проверить тип Outlook.Item?

1

У меня есть надстройка Outlook 2013,

Outlook.MAPIFolder inboxFolder;
Outlook.Items mailInboxItems;

private void ThisAddIn_Startup(object sender, EventArgs e)
{
   ... other code ---

   mailInboxItems = inboxFolder.Items;
   mailInboxItems.ItemAdd += mailInboxItems_ItemAdd;
}

private void mailInboxItems_ItemAdd(object item)
{
   Outlook.MailItem emailMessage = (Outlook.MailItem)item; // cast error
   ProcessEmail(emailMessage);
}

Исключение возникает, когда, конечно, элемент, входящий в него, не имеет типа Outlook.MailItem:

Невозможно передать COM-объект типа "System.__ ComObject" в тип интерфейса "Microsoft.Office.Interop.Outlook.MailItem".

Как я могу проверить, что параметр "item" имеет только допустимый тип, т.е. Outlook.MailItem, чтобы избежать каких-либо исключений?

Теги:
outlook
outlook-addin
vsto

3 ответа

2
Лучший ответ

Вы можете использовать операторы "is" и "as" в С#. См. " Как: программно определить текущий элемент Outlook" для получения дополнительной информации.

Также объектная модель Outlook предоставляет свойство MessageClass - строку, представляющую класс сообщения для элемента Outlook. Под капотом класс сообщения используется для определения того, какой инспектор должен использовать в Outlook для разметки элемента.

1

В вашу папку вы можете добавлять различные элементы, такие как MailItem, AppointmentItem и т.д. Для работы с MailItems используйте следующий код:

var emailMessage = item as MailItem;
if(emailMessage == null)
{
    retrun;
}

// here you can use emailMessage as MailItem
ProcessEmail(emailMessage);
0

Первый элемент проверки - mailitem

  if(item is Outlook.MailItem){
    Outlook.MailItem emailMessage =item as Outlook.MailItem
    ProcessEmail(emailMessage);
  }

он будет работать как ваше ожидание.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню