为什么C#编译器不能通过switch语句跟踪所有代码路径
发布时间:2020-12-15 06:41:14 所属栏目:百科 来源:网络整理
导读:以下代码工作正常: ListControl lstMyControl;if (SomeVariable == SomeEnum.Value1){ lstMyControl = new DropDownList();}else{ lstMyControl = new RadioButtonList();}lstMyControl.CssClass = "SomeClass"; 而下面的代码不会编译: ListControl lstMyC
以下代码工作正常:
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"; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |