Очистка избыточной оператор switch


Как я могу использовать более универсальный метод, чтобы убрать избыточность в сообщении ниже переключатель?

Я работаю на приложение ASP.NET веб-формы, которые будут иметь пять одинаковых пользовательские элементы управления, которые я буду показывать и прятать на основе значения из выпадающего списка. (Я уже по пути пытаюсь добавлять и удалять элементы управления динамически-вопрос о управление государств на контроль было очень сложно, поэтому в интересах доставки я выбираю фиксированное количество элементов.)

Подход в настоящее время я использую работает, но не очень элегантный:

protected void DisplayUserControls(int numberOfControls)
{
    switch (numberOfControls)
    {
        case 2:
            UserControl1.Visible = true;
            UserControl2.Visible = true;
            UserControl3.Visible = false;
            break;

        case 3:
            UserControl1.Visible = true;
            UserControl2.Visible = true;
            UserControl3.Visible = true;
            break;

        default:
            UserControl1.Visible = true;
            UserControl2.Visible = false;
            UserControl3.Visible = false;
            break;
    }
}

Какие здесь варианты? Лучшее, что я могу придумать, используя numberOfControls, чтобы построить имя элемента управления, но это, кажется, суховато. Предложения по достоинству.

Редактировать: я реализовал решение, аналогичное принятому ответа ниже. Я застрял на загрузке элементов в списке. Закомментированного кода это больше вдоль линий, что я хотел бы сделать, но не могу заставить его работать. Код раскомментирован работает. Предложения?

private List<ShiftControl> PopulateShiftControlList()
{
    ShiftControl shiftControlList = new List<ShiftControl>();

    //ControlCollection panelControls = ShiftPanel.Controls;

    //foreach (ShiftControl control in panelControls)
    //{
    //    shiftControlList.Add(control);
    //}

    shiftControlList.Add(ShiftControl1);
    shiftControlList.Add(ShiftControl2);
    shiftControlList.Add(ShiftControl3);
    shiftControlList.Add(ShiftControl4);

    return shiftControlList;
}


607
8
задан 2 марта 2011 в 02:03 Источник Поделиться
Комментарии
3 ответа

Я хотел создать список элементы управления UserControl. Исходя из суммы элементов управления, которые должны быть видны, обход списка и установить X элементы управления видны.

protected void DisplayUserControls(List<UserControl> controls, int numberOfControls)
{
Contract.Requires( numberOfControls >= 0 && numberOfControls <= controls.Count );

for ( int i = 0; i < numberOfControls; ++i )
{
controls[ i ].Visible = true;
}
for ( int i = numberofControls; i < controls.Count; ++i )
{
controls[ i ].Visible = false;
}
}

Вернее на одном дыхании:

protected void DisplayUserControls(List<UserControl> controls, int numberOfControls)
{
Contract.Requires( numberOfControls >= 0 && numberOfControls <= controls.Count );

for ( int i = 0; i < controls.Count; ++i )
{
controls[ i ].Visible = i < numberOfControls;
}
}

8
ответ дан 2 марта 2011 в 02:03 Источник Поделиться

Человек, все эти ответы не перебор для этого. Просто сделай:

protected void DisplayUserControls(int numberOfControls)
{
UserControl1.Visible = numberOfControls > 0;
UserControl2.Visible = numberOfControls > 1;
UserControl3.Visible = numberOfControls > 2;
}

Простой хороший.

3
ответ дан 3 марта 2011 в 01:03 Источник Поделиться

Первая мысль:

UserControl1.Visible = true;
UserControl2.Visible = true;
UserControl3.Visible = true;

switch (numberOfControls)
{
case 1:
UserControl2.Visible = false;
UserControl3.Visible = false;
break;
case 2:
UserControl3.Visible = false;
break;
case 3:
}

Редактирования: новая идея:

Arraylist controls;

for (int x=0; x<numberOfControls; x++)
{
((Control)controls.get(x)).Visible = true;
}

1
ответ дан 2 марта 2011 в 02:03 Источник Поделиться