为什么这个属性无法解析,但如果我通过动态转换可以访问?

时间:2017-10-26 14:04:53

标签: c# visual-studio-2010 casting compiler-errors outlook-addin

我的方法将Outlook.MailItem作为参数。在检查MailItem对象并阅读文档时,我注意到它有一个名为Sender的属性,它返回AddressEntry。 当我想使用这个属性时,我收到以下错误:Cannot resolve symbol 'Sender',并且Sender以红色突出显示。尝试构建并忽略突出显示结果:

  

' Microsoft.Office.Interop.Outlook.MailItem'不包含发件人'的定义没有扩展方法' Sender'接受类型' Microsoft.Office.Interop.Outlook.MailItem'的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)

很奇怪,文档说该属性存在,当我调试时,我甚至可以检查该值。 (我必须在这个旧项目中使用VS2010,因此调试检查对于所有System.__ComObject都不是很好,但我可以检查Sender的值,因此它存在。)

但是,当我将MailItem转换为dynamic时,我可以按如下方式访问发件人,而不会出现任何问题:

var sender = (AddressEntry)((dynamic)mailItem).Sender;

我在这里做错了什么?我现在因为缺乏更好的解释而将其归咎于VS2010。

1 个答案:

答案 0 :(得分:0)

好的,首先感谢所有花时间思考的人。

原来MailItem是一个界面(所以那个'为什么你在你的界面名称前输入一个I,比如IMailItem ),我的解决方案中有Microsoft.Office.Interop.Outlook;的旧版本。在我将此版本(以及它所依赖的Office参考资料)更新为较新版本后,我可以访问MailItem.Sender

所以它是在新版本的文档中...我的坏!