【问题标题】:convert .net 4.0 syntax OfType to .net 3.5将 .net 4.0 语法 OfType 转换为 .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。

标签: c# .net excel interop


【解决方案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
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2014-10-09
    • 2011-09-07
    • 1970-01-01
    相关资源
    最近更新 更多