我如何处理 Outlook VSTO 对象,就好像它们是邮件项目一样

And*_*iih 0 c# reflection polymorphism vsto

我已经编写了一些 VSTO (2003) 代码,这些代码根据邮件项目的附件成功地应用了一些强制性主题行更改。该代码是为在 microsoft.office.interop.outlook.mailitem 上操作而编写的但是,我需要相同的代码来操作其他类型,例如 microsoft.office.interop.outlook.appointmentitem(实际上它需要为任何用户可以发送具有主题的内容)。

假设 Outlook 项目类型具有主题属性、附件属性和保存方法,我该如何编写适用于所有相关 interop.outlook 类型的代码。

我尝试通过反射解决这个问题,但 GetProperty 正在返回 null 所以我不能在它上面使用 GetValue

? mi.GetType().GetProperty("主题")
空值

?(mi as Microsoft.Office.Interop.Outlook.MailItem).主题
“考试科目”

似乎没有我可以投射到的通用 Outlookitem 类来执行此操作。正确的做法是什么?

编辑:为了澄清我的代码是这样开始的......

    void Application_ItemSend(object Item, ref bool Cancel) 
    {
            如果(项目是 Microsoft.Office.Interop.Outlook.MailItem) 
            {
                Microsoft.Office.Interop.Outlook.MailItem currentItem = 
                    项目为 Microsoft.Office.Interop.Outlook.MailItem;

然后对 currentItem 执行操作(包括传递给当前使用 Microosft.Office.Interop.Outlook.MailItem 属性键入的各种函数。我希望它们处理“Microsoft.Interop.Outlook.somethingsendable”

Ste*_*end 5

这不会开箱即用 -AppointmentItem并且MailItem是完全不同的接口,因此多态性不是一种选择。

我能建议的最好方法是您创建一个SendableItem自己的类来包装您需要支持的 PIA 接口,并将切换代码封装在您想要使用的“常见”操作的通用包装器后面。您可以使用 aMailItem或 an创建一个 SendableItem ,AppointmentItem但是一旦创建,它们从SendableItem包装器的外部看起来是一样的。