以下代码工作正常:
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都必须被实例化,但是compilr似乎不能遵循通过switch语句的代码路径来查看.在上面的简单例子中,我只是使用if / else.但是有几次,当我想要使用10个不同的类完成这些操作时,所有这些类都从同一个基类继承,并且当一个switch语句是我应该使用的时候,有一个10个if / elseif语句是恼人的.
解决方法
ListControl lstMyControl; switch (SomeVariable) { case SomeEnum.Value1: lstMyControl = new DropDownList(); break; default: //Don't prefix with "case" lstMyControl = new RadioButtonList(); break; } lstMyControl.CssClass = "SomeClass";