加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么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";

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读