2014-01-09 3 views
0

Я унаследовал какой-то код, который я бы хотел сделать DRY до 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

Может быть, я не понимаю, но что случилось с 'вар DefaultLists = новый List () {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; 
    } 
} 

Я изменил второй 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; 
+0

также необходимо было изменить i-> j внутри цикла for. учитывая, что я не могу различать индексы, которые я выбираю, foreach кажется гораздо лучшим решением! – Will

0

вы могли бы сделать что-то Ли ке это:

foreach(var item in new CheckBoxList[]{ 
          ScanDefaultTasks, 
          BehDefaultTasks, 
          MEGDefaultTasks, 
          DefaultQuestionnaires} 
         .SelectMany(l => l.Items)) 
    item.Selected = true; 
Смежные вопросы