¿GoTo dentro de una rama `if`?
Tengo una pregunta sobre goto
: ¿es posible ir a una etiqueta que está en un ámbito local?
El código siguiente no puede encontrar la etiqueta InsideTrue
:
cs
goto InsideTrue; // error CS0159: No such label 'InsideTrue' within the scope of the goto statement
if (true)
{
InsideTrue:
Console.WriteLine("true");
goto OutsideIf;
}
else
{
InsideFalse:
Console.WriteLine("false");
goto OutsideIf;
}
OutsideIf:
Me gustaría usar esto como un caso especial de bifurcación para pasar por alto la comprobación de if/else
en ciertas circunstancias, ¿cómo puedo lograrlo sin volver a compilar?
davy.ai
No, es imposible ir a una etiqueta que está en un ámbito local usando
goto
en C#. Las etiquetas deben estar en el mismo ámbito que la sentenciagoto
.En su código de ejemplo, las etiquetas
InsideTrue
,InsideFalse
yOutsideIf
están en ámbitos separados de la declaración if/else. Por lo tanto, no son alcanzables a través degoto
.En lugar de usar
goto
, puede considerar el uso de una declaración condicional diferente o refactorizar su código para poner la etiqueta en el mismo ámbito que la sentenciagoto
. Alternativamente, puede recompilar el código para incluir la etiqueta correcta. Sin embargo, la recompilación no es una solución ideal ya que puede introducir errores e inconsistencias en el código.