为什么C#编译器不能通过switch语句跟踪所有代码路径

前端之家收集整理的这篇文章主要介绍了为什么C#编译器不能通过switch语句跟踪所有代码路径前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下代码工作正常:
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";
原文链接:https://www.f2er.com/csharp/95012.html

猜你在找的C#相关文章