2012-10-17 169 views
2

我有这样的.NET 4.0代码:转换.NET 4.0语法OfType到.NET 3.5

var myTable = tables[1]; 
myTable = tables.Item["Table1"]; 
myTable = tables.OfType<Excel.ListObject>().FirstOrDefault(t => t.Name == "Table1"); 

我试图使用.NET 3.5编译,得到一堆错误:

错误23属性,索引器或事件'Item'不受 语言支持;尝试直接调用访问方法 'Microsoft.Office.Interop.Excel.ListObjects.get_Item(对象)'

错误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?

非常感谢您的建议。

+6

有没有简单的解决方法。 ListObjects接口有点摸索,它有一个Item属性,它不是接口的默认属性。 MSDN文章中默认的名称为_Default。 C#版本3和更早版本仅支持一个索引器。 ListObjects错误。您必须显式使用get_Item(),就像错误消息所述。这打破了Linq。 –

回答

2

这个问题提及的答案为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 
    }