如何创建匿名对象引用数组

时间:2014-01-09 21:50:37

标签: c# asp.net reference

我继承了一些我想干的代码到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;
}

2 个答案:

答案 0 :(得分: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;
    }
}

我已在此行中将第二个i更改为j

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;

答案 1 :(得分:0)

您可能会这样做:

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