2013-03-27 100 views
3

我有兩個圖形對象(說某種Table s),我想設置它們的樣式。瑣碎代碼如下:(真正的代碼有更多行)對同一類型的多個對象執行大量操作

table1.BorderWidth = 2; 
table1.BorderColor = Color.GloriousPink; 

table2.BorderWidth = 2; 
table2.BorderColor = Color.GloriousPink; 

更巧妙的方式,使用的方法。

void Format Table(int tableIndex) 
{ 
    Table table; 
    if(tableIndex == 1) 
     table = table1; 
    if(tableIndex == 2) 
     table = table2; 
    table.BorderWidth = 2; 
    table.BorderColor = Color.GloriousPink; 
} 

我想了一個辦法,使之更具可擴展性(在if/switch部分生長快),我想出了:

foreach(Table table in new List<Table> { table1, table2 }) 
{ 
    table.BorderWidth = 2; 
    table.BorderColor = Color.GloriousPink; 
} 

這是短,任何潛在的額外表是很簡單。它有什麼缺點嗎?

+0

這就是它。重複的代碼和多個'if'語句是一種常見的代碼異味。 – Groo 2013-03-27 14:20:20

+0

你的第二種方法可能有點聰明。而不是接受一個'int tableIndex'作爲參數,你可以改用'Table table'。 'void FormatTable(Table table)'。這樣你就不需要'if',你的代碼變得更短,更容易閱讀。 – Nolonar 2013-03-27 14:25:06

+0

您也可以考慮將列表作爲父類的私有字段,其中包含所有表(以避免在您要將操作應用於所有表時必須重新創建列表)。 – Groo 2013-03-27 14:34:29

回答

7

沒有跳出作爲錯誤,但我會按照你原來的想法去實際上把它放在一個方法中,而不是傳入實際的表中。

public void Format(Table table) 
{ 
    table.BorderWidth = 2; 
    table.BorderColor = Color.GloriousPink; 
} 

foreach(Table table in tables) 
{ 
    Format(table); 
} 
2

我不知道你的要求,但如何對一些功能性的風格:

Action<Table> formatTable = (table) => { 
    table.BorderWidth = 2; 
    table.BorderColor = Color.GloriousPink; 
}; 

new List<Table> { table1, table2 }.ForEach(formatTable); 

如果你不喜歡這些東西Action

void FormatTable(Table table) 
{ 
    table.BorderWidth = 2; 
    table.BorderColor = Color.GloriousPink; 
} 

new List<Table>{ table1, table2 }.ForEach(FormatTable); 
+0

對於這樣一個簡單的操作,這可能是一個矯枉過正的情況,除非應用函數在運行時需要互換。 – Groo 2013-03-27 14:22:31

+0

想法是,他可以擁有'ApplyTable'類的成員並將其傳遞給ForEach' – 2013-03-27 14:23:19

+0

他確實說這是一個非常簡單的示例,並且可能會增長... – 2013-03-27 14:26:20

2

讓編譯器創建數組:

void FormatTable(params Table[] tables) 
{ 
    foreach(var table in tables) 
    { 
     table.BorderWidth = 2; 
     table.BorderColor = Color.GloriousPink; 
    } 
} 

,並調用它像這樣:

FormatTables(table1, table2); 
+0

使用'params'的+1 – Nolonar 2013-03-27 14:28:26

相關問題