隐式转换在我的VS2012解决方案之一中被接受,但在另一个中不被接受.为什么

本文关键字:另一个 为什么 转换 我的 VS2012 解决方案 | 更新日期: 2023-09-27 18:01:26

我在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?)

隐式转换在我的VS2012解决方案之一中被接受,但在另一个中不被接受.为什么

。. NET 4增加了dynamic和将COM互操作类型嵌入到程序集中的能力,因此客户端不需要安装或分发非常大的pia。

这两个特性也可以很好地相互作用,我认为这就是您的项目的不同之处。如果您为程序集启用"嵌入互操作类型",则编译器将COM variant类型映射为dynamic而不是object。这允许您使用动态类型来隐式地强制转换返回值,就像您在第二个示例中所做的那样。

要启用"嵌入互操作类型",只需在有关项目的Microsoft.Office.Interop.Excel引用的属性中将值更改为True

相关文章: