2011-08-08 31 views
0

我有:這些VB.Net片段中的任何一個可以減少到1行嗎?

  • 片段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 
    

有一些構建體或方法,其可在1線做這些?

注意:
所有的片段是不同的,不應該clubbed。這些情況下,我認爲可能有一個更聰明的方式來完成這些簡單的任務。

+1

把所有的語句放在一行之間,並在它們之間用':'表示? –

+0

它是一個很好的提示,但這不是我的意思! –

回答

0

因此,發現沒有辦法減少任何模板。

在某些地方使用:技巧..感謝!

0

您可以使用ForEach擴展方法。

+0

顯示一些代碼..我知道有一些現有的構造可以做到這一點,但我不知道如何使用它們。 –

1

使用一些LINQ可能會使其中一些使用較少的行,但其中大多數不會很可讀。你應該爲可維護性編寫代碼,而不僅僅是爲了完成工作。如果您在考慮性能:儘可能少地使用線條並不是真正的優化指標。

片段1由本身可以減少爲單個線,假設wbSheetNames是字符串的列表:

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

改進?不是真的。你可以通過使用類似刪除列表分配片斷的不屬於:

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

這無疑是在原來的略有改善。

這就是說:它看起來像你可能能夠結合片段1和2,保存一個臨時列表的分配。然而,代碼的確切意圖並不清楚。一路上你正在添加2張?否則,我會認爲wb.Sheets(i + 2)將超出範圍。

+0

不,所有片段都不同,不能合併。 –

+0

我想以更聰明的方式完成這些簡單明顯的任務,就像專業人員會做的一樣。 –

+0

我覺得必須在vb.net中有構造才能以更直接的方式完成這些明顯的任務。 –

相關問題