2014-01-09 39 views
0

我已經繼承了一些代碼,我想幹掉2個循環。如何創建一個匿名的對象引用數組

外層循環遍歷checkBoxeList對象。 內循環檢查所有框。

CheckBoxList[] DefaultLists = { ScanDefaultTasks, BehDefaultTasks,MEGDefaultTasks,DefaultQuestionnaires }; 
for (int i = 0; i < DefaultLists.Count(); i++) { 
    for (int j = 0; i < DefaultLists[i].Items.Count; j++) 
    { 
     DefaultLists[i].Items[i].Selected = true; 
    } 
} 

怎麼能DefaultList建成,使得它存儲引用到每個CheckBoxList的對象?

應該如何調用這些引用?

看起來像一個解決方案是建立一個"box" class。這種模式發生幾次,在大多數地方複製冗餘代碼的更多長度。爲每個實例構建一個類看起來好像過度。


原來的樣子

for (int i = 0; i < ScanDefaultTasks.Items.Count; i++) 
{ 
    ScanDefaultTasks.Items[i].Selected = true; 
} 
for (int i = 0; i < BehDefaultTasks.Items.Count; i++) 
{ 
    BehDefaultTasks.Items[i].Selected = true; 
} 
for (int i = 0; i < MEGDefaultTasks.Items.Count; i++) 
{ 
    MEGDefaultTasks.Items[i].Selected = true; 
} 
for (int i = 0; i < DefaultQuestionnaires.Items.Count; i++) 
{ 
    DefaultQuestionnaires.Items[i].Selected = true; 
} 
+0

也許我不明白這一點,但是這有什麼錯'VAR DefaultLists =新的List <的CheckBoxList>(){ScanDefaultTasks,BehDefaultTasks,MEGDefaultTasks,DefaultQuestionnaires};'? –

+0

@KonradKokosa像CheckBoxList []構造,頁面掛起,直到超時。爲什麼,我還不明白。 – Will

回答

1

DefaultLists是存儲到包含CheckBoxLists引用的數組。所以我在那裏看不到問題。我可以在你的樣品中發現的唯一的問題是,你使用i,你應該在內部循環使用j

CheckBoxList[] DefaultLists = { ScanDefaultTasks, BehDefaultTasks,MEGDefaultTasks,DefaultQuestionnaires }; 
for (int i = 0; i < DefaultLists.Count(); i++) { 
    for (int j = 0; i < DefaultLists[i].Items.Count; j++) 
    { 
     DefaultLists[i].Items[j].Selected = true; 
    } 
} 

我已經改變了第二ij在這一行:

DefaultLists[i].Items[j].Selected = true; 

爲了簡化事情有點,你也可以使用每個的循環:

CheckBoxList[] DefaultLists = { ScanDefaultTasks, BehDefaultTasks,MEGDefaultTasks,DefaultQuestionnaires }; 
foreach(var cbl in DefaultLists) 
    foreach(var item in cbl.Items) 
     item.Selected = true; 
+0

也需要在for循環條件中更改i-> j。鑑於我無法區分我選擇的索引,所以foreach似乎是一個更好的解決方案! – Will

0

你可能做一些利柯本:

foreach(var item in new CheckBoxList[]{ 
          ScanDefaultTasks, 
          BehDefaultTasks, 
          MEGDefaultTasks, 
          DefaultQuestionnaires} 
         .SelectMany(l => l.Items)) 
    item.Selected = true; 
相關問題