我编写了一些VSTO(2003)代码,根据邮件的附件成功应用了一些强制性的主题行更改。代码编写为在microsoft.office.interop.outlook.mailitem上运行但是,我需要相同的代码来操作其他类型,例如microsoft.office.interop.outlook.appointmentitem(事实上它需要适用于任何事情用户可以发送具有主题的内容)。
假设outlook项类型具有subject属性,attachments属性和save方法,我该如何处理编写适用于所有相关interop.outlook类型的代码。
我尝试通过反射解决这个问题,但GetProperty正在撤销null,所以我不能在其上使用GetValue
? mi.GetType().GetProperty("Subject") null ?(mi as Microsoft.Office.Interop.Outlook.MailItem).Subject "Test Subject"
似乎没有一个我可以强制转换的通用outlookitem类来执行此操作。什么是正确的方法?
编辑: 为了澄清我的代码就像这样......
void Application_ItemSend(object Item, ref bool Cancel) { if (Item is Microsoft.Office.Interop.Outlook.MailItem) { Microsoft.Office.Interop.Outlook.MailItem currentItem = Item as Microsoft.Office.Interop.Outlook.MailItem;
然后对currentItem执行操作(包括传递给当前使用Microosft.Office.Interop.Outlook.MailItem属性键入的各种函数。我希望它们处理“Microsoft.Interop.Outlook.somethingsendable”
答案 0 :(得分:4)
这不是开箱即用的工具 - AppointmentItem
和MailItem
是完全不同的接口,因此多态性不是一种选择。
我能建议的最好的是你创建一个自己的SendableItem
类来包装你需要支持的PIA接口,并将切换代码封装在一个常见的包装器后面,用于你想要的'常见'操作使用。您可以使用MailItem
或AppointmentItem
创建SendableItem,但一旦创建,它们在SendableItem
包装器的外部看起来相同。