下面的代码工作正常:
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个不同的类进行类似的操作,这些类都继承自相同的基类,而当我应该使用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";