2014-01-09 78 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; 
相关问题