Код ниже работает нормально:
ListControl lstMyControl;
if (SomeVariable == SomeEnum.Value1)
{
lstMyControl = new DropDownList();
}
else
{
lstMyControl = new RadioButtonList();
}
lstMyControl.CssClass = "SomeClass";
Принимая во внимание, что приведенный ниже код не скомпилируется:
ListControl lstMyControl;
switch (SomeVariable)
{
case SomeEnum.Value1:
lstMyControl = new DropDownList();
break;
case default:
lstMyControl = new RadioButtonList();
break;
}
lstMyControl.CssClass = "SomeClass";
Во втором примере компилятор говорит, что я пытаюсь установить свойство для переменной, которая не была создана. В любом случае необходимо создать экземпляр lstMyControl, но компилятор не может следовать этому пути кода через оператор switch, чтобы увидеть это. В приведенном выше простом примере я бы просто использовал if / else. Но было несколько раз, когда я хотел сделать что-то подобное с 10 различными классами, которые все наследуются от одного базового класса, и наличие 10 операторов if / elseif раздражает, когда оператор switch является тем, что я должен использовать.