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

C# Outlook加载项异常-如何检查Outlook.Item的类型?,c#,outlook,vsto,outlook-addin,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

我有一个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.\u ComObject”类型的COM对象强制转换为接口 键入“Microsoft.Office.Interop.Outlook.MailItem”


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

您可以向文件夹中添加不同类型的项目,如
MailItem
AppointmentItem
等。要使用
邮件项目
请使用以下代码:

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

// here you can use emailMessage as MailItem
ProcessEmail(emailMessage);
可以在C#中使用“is”和“as”运算符。有关更多信息,请参阅


Outlook对象模型还提供属性—一个表示Outlook项目的消息类的字符串。在引擎盖下,message类用于标识Outlook中用于显示项目的检查器。

第一个检查项目类似于mailitem

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

它将按照您的期望工作

@J.Steen-哦,很好的提示,现在我只需要检查空值!你知道如何把我的范围缩小到邮件项目吗?非常感谢。