为什么在这种情况下兼容引用类型之间的转换会编译(Excel 2010、.Net 4.5)
using Excel = Microsoft.Office.Interop.Excel;
Excel.Application excelApplication = null;
excelApplication = new Excel.Application();
Excel.Worksheet worksheet = workbook.Worksheets[1] as Excel.Worksheet;
在下面的情况下,它不会,尽管我看到这样的示例:
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
在这种情况下,我收到以下编译错误:
> CSC : error CS0518: Predefined type 'Microsoft.CSharp.RuntimeBinder.Binder' is not
defined or imported
> error CS1969: One or more types required to compile a dynamic expression cannot be
found. Are you missing a reference?
Best,
EDIT:感谢下面的两位回答者,以下解释听起来很合理:
对于 .Net 版本 >= 4.0 的项目,在项目参考中不包括 Microsoft.CSharp,支持
动态语言运行时 (DLR) 和 C# 之间的互操作不是
可能的,即不可能进行动态转换。
(T) 如果 x 无法转换为 T,x 将抛出 InvalidCastException 异常,而在这种情况下 x as T 将返回 null。当不存在类型转换问题时,两者是等效的。
(T) x 比 x 作为 T 的运算更简单、更快。
有关性能结果,请查看:http://www.codeproject.com/Articles/8052/Type-casting-impact-over-execution-performance-in#_ rating http://www.codeproject.com/Articles/8052/Type-casting-impact-over-execution-performance-in#_rating
一些附加信息:
强制转换显式调用从一种类型到另一种类型的转换运算符。如果没有定义这样的转换运算符,转换将会失败。您可以编写自定义转换运算符以在用户定义的类型之间进行转换。有关定义转换运算符的详细信息,请参阅显式(C# 参考)和隐式(C# 参考)。
来源:http://msdn.microsoft.com/en-us/library/ms173105(v=vs.80).aspx http://msdn.microsoft.com/en-us/library/ms173105(v=vs.80).aspx
更新:根据您提供的错误消息,该应用程序似乎面向 ASP.NET 3.5。我的猜测是,进入项目属性并将目标框架设置为 4.0 将解决该问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)