我在VS 2012中有两个C#解决方案。
以下显式转换适用于两种解决方案:
Excel.Range rng = (Excel.Range)Date.DataRange.Cells[1];
以下隐式转换在其中一个解决方案中有效但在另一个解决方案中生成错误:
Excel.Range rng = Date.DataRange.Cells[1];
隐式转换在其中一个项目中工作的原因可能是什么?而不是另一个项目?
编辑:我收到的错误消息是'object' does not contain a definition for 'Group' and no extension method 'Group' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
答案 0 :(得分:1)
.NET 4添加了dynamic
并且能够将COM互操作类型嵌入到程序集中,因此客户端不需要安装或分发非常大的PIA。
这两个功能也很好地互动,我认为这是你项目的不同之处。如果您启用了“嵌入互操作类型”'对于程序集,编译器会将COM variant
类型映射到dynamic
而不是object
。这允许您使用动态类型来隐式地转换返回值,就像您在第二个示例中所做的那样。
要启用“嵌入互操作类型'”,只需将值更改为相关项目中True
引用的属性中的Microsoft.Office.Interop.Excel
。