我的一个 VS2012 解决方案接受隐式转换,但另一个不接受。为什么?
Implicit conversion is accepted in one of my VS2012 solutions but not in the other. Why?
我在 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?)
.NET 4 添加了 dynamic
以及将 COM 互操作类型嵌入程序集的能力,因此客户端不需要安装或分发非常大的 PIA。
这两个功能也可以很好地交互,我认为这就是您的项目的不同之处。如果为程序集启用 'Embed Interop Types',则编译器会将 COM variant
类型映射到 dynamic
而不是 object
。这允许您使用动态类型来隐式转换 return 值,就像您在第二个示例中所做的那样。
要启用 'Embed Interop Types',只需在相关项目的 Microsoft.Office.Interop.Excel
引用的属性中将值更改为 True
。
我在 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?)
.NET 4 添加了 dynamic
以及将 COM 互操作类型嵌入程序集的能力,因此客户端不需要安装或分发非常大的 PIA。
这两个功能也可以很好地交互,我认为这就是您的项目的不同之处。如果为程序集启用 'Embed Interop Types',则编译器会将 COM variant
类型映射到 dynamic
而不是 object
。这允许您使用动态类型来隐式转换 return 值,就像您在第二个示例中所做的那样。
要启用 'Embed Interop Types',只需在相关项目的 Microsoft.Office.Interop.Excel
引用的属性中将值更改为 True
。