Outlook加载项异常 - 如何检查Outlook.Item的类型?

时间:2015-01-12 09:14:29

标签: c# outlook vsto outlook-addin

我有一个 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类型时抛出异常:

  

无法将“System .__ ComObject”类型的COM对象强制转换为接口   输入'Microsoft.Office.Interop.Outlook.MailItem'。

如何检查参数“item”是否只是有效类型,即Outlook.MailItem以避免任何异常?

3 个答案:

答案 0 :(得分:2)

您可以在C#中使用“is”和“as”运算符。有关详细信息,请参阅How to: Programmatically Determine the Current Outlook Item

Outlook对象模型还提供MessageClass属性 - 表示Outlook项的邮件类的字符串。在引擎盖下,消息类用于标识在Outlook中使用哪个检查器来绘制项目。

答案 1 :(得分:1)

您可以在文件夹中添加不同类型的项目,例如MailItemAppointmentItem等。要使用MailItems,请使用以下代码:

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

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

答案 2 :(得分:0)

首先检查项目是mailitem,如

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

它将按您的期望工作。