El código funciona bien a continuación:Por qué no puede compilador de C# siga todas las rutas de código a través de una sentencia switch
ListControl lstMyControl;
if (SomeVariable == SomeEnum.Value1)
{
lstMyControl = new DropDownList();
}
else
{
lstMyControl = new RadioButtonList();
}
lstMyControl.CssClass = "SomeClass";
Mientras que el código de abajo no se compilará:
ListControl lstMyControl;
switch (SomeVariable)
{
case SomeEnum.Value1:
lstMyControl = new DropDownList();
break;
case default:
lstMyControl = new RadioButtonList();
break;
}
lstMyControl.CssClass = "SomeClass";
En el segundo ejemplo el compilador dice que estoy tratando de establecer una propiedad en una variable que no ha sido instanciada. En cualquier caso, lstMyControl debe crearse una instancia, pero el compilador no puede seguir esas rutas de código a través de la instrucción switch para ver eso. En el ejemplo simple anterior, simplemente usaría if/else. Pero algunas veces he querido hacer algo como esto con 10 clases diferentes que todas heredan de la misma clase base y tener 10 sentencias if/elseif es molesto cuando una instrucción switch es lo que debería estar usando.
esperando respuesta allí ... Java no sería mordido de esa manera ... Y hubiera esperado que C# tampoco. – Romain
if (SomeVariable = SomeEnum.Value1) <- ¿Seguro que esto no debería ser una comparación? if (SomeVariable == SomeEnum.Value1) –
Encuentro que en su segundo ejemplo (como está escrito), el compilador realmente dice 'Error de sintaxis '(' expected 'en la línea donde tiene' case default: '. Corrija esto para 'default:' y presto, todo funciona. – AakashM