这些VB.Net片段中的任何一个都可以减少到1行吗?

时间:2011-08-08 05:17:28

标签: .net vb.net excel

我有:

  • 代码段1:

    For Each sheet In WB.Sheets
        wbSheetNames.Add(sheet.Name)
    Next sheet
    
  • 摘录2:

    For i = 0 To sheetNames.Count - 1
        wb.Sheets(i + 2).Name = sheetNames(i).Replace(currMonth, nextMonth)
    Next
    
  • 摘录3:

     For Each cell In row
          If cell.Formula.Contains(nameString) Then
               downRange(sheet, cell.Address()).Value = downRange(sheet, cell.Address()).Value
          End If
     Next cell
    
  • 摘录4:

    For Each sheet In sheetsToDelete
       sheet.Activate()
       sheet.Delete()
    Next sheet
    

是否有一些构造或方法可以在一行中完成这些?

注意:
所有的片段都是不同的,不应该是杵状的。在这种情况下,我认为可能有更聪明的方法来完成这些简单的任务。

3 个答案:

答案 0 :(得分:1)

使用一些LINQ可能会使其中一些使用更少的行,但其中大多数都不会非常易读。您应该编写可维护性的代码,而不仅仅是为了完成工作。如果您正在考虑性能:使用尽可能少的行并不是优化的良好指示。

假设wbSheetNames是一个String列表,

Snippet 1本身可以简化为一行:

wbSheetNames.AddRange(WB.Sheets.Select(Function(x) x.Name))

改进?并不是的。您可以使用以下内容删除不属于代码段的列表分配:

wbSheetNames = WB.Sheets.Select(Function(x) x.Name).ToList()

这可以说比原作略有改进。

话虽如此:看起来您可以将代码段1和2结合起来,从而节省了临时列表的分配。然而,代码的确切意图并不清楚。在某处你正在添加两张纸?否则我会认为wb.Sheets(i + 2)将超出范围。

答案 1 :(得分:0)

您可以使用ForEach扩展程序。

答案 2 :(得分:0)

因此,没有办法减少任何模板。

在某些地方使用:技巧.. Thanx为此!