将 .net 4.0 语法 OfType 转换为 .net 3.5
Posted
技术标签:
【中文标题】将 .net 4.0 语法 OfType 转换为 .net 3.5【英文标题】:convert .net 4.0 syntax OfType to .net 3.5 【发布时间】:2012-10-08 03:05:43 【问题描述】:我有这个 .NET 4.0 代码:
var myTable = tables[1];
myTable = tables.Item["Table1"];
myTable = tables.OfType<Excel.ListObject>().FirstOrDefault(t => t.Name == "Table1");
我正在尝试使用 .NET 3.5 进行编译并遇到一堆错误:
错误 23 属性、索引器或事件“项目”不受 语言;尝试直接调用访问器方法 'Microsoft.Office.Interop.Excel.ListObjects.get_Item(object)'
和
错误 24 'Microsoft.Office.Interop.Excel.ListObjects' 不包含 'OfType' 的定义和最佳扩展方法重载 'System.Linq.Queryable.OfType(System.Linq.IQueryable)' 有 一些无效的参数
和
错误 25 实例参数:无法从 'Microsoft.Office.Interop.Excel.ListObjects' 到 'System.Linq.IQueryable'
您能否指导我了解这些错误的确切含义,以便我可以尝试将其转换为 .NET 3.5?
非常感谢您的建议。
【问题讨论】:
没有简单的解决方法。 ListObjects 接口有点笨拙,它有一个 Item 属性,它不是接口的默认属性。在 MSDN 文章中,默认名称为 _Default。 C# 版本 3 及更早版本仅支持一个索引器。 ListObjects 的错误。正如错误消息所述,您必须明确使用 get_Item()。这打破了 Linq。 【参考方案1】:这个问题是指给This command requires at least two rows of source data的答案;该代码显示了在代码中访问表/列表对象的 3 种不同方式。
这是我发布的代码:
var myTable = tables[1];
var myTable = tables.Item["Table1"];
var myTable = tables.OfType<Excel.ListObject>().FirstOrDefault(t => t.Name == "Table1");
我的意思是说明在代码中访问表有不同的方式。
为了把它放在上下文中,我创建了一个带有一个名为“TestButton”的按钮的功能区。这是完整的代码,应该适用于 3.5:
using Excel = Microsoft.Office.Interop.Excel;
private void TestButton_Click(object sender, RibbonControlEventArgs e)
var worksheet = (Excel.Worksheet) Globals.ThisAddIn.Application.ActiveSheet;
var tables = worksheet.ListObjects;
var table = tables.Item["Table1"]; // this is the line you are referring to
//do something with table
【讨论】:
以上是关于将 .net 4.0 语法 OfType 转换为 .net 3.5的主要内容,如果未能解决你的问题,请参考以下文章
出现错误.. 从 .net 4.0 转换为 .net 3.5 时出现错误。
将连接字符串从 Microsoft.Jet.OLEDB.4.0 转换为 Microsoft.ACE.OLEDB.12.0 提供程序
转换为 Visual Studio 2010 / .Net 4.0 后 app.config “找不到架构信息”
将 c++ CString.Format 语法转换为 .NET 字符串语法(可变前导宽度和小数位)