C# Language ir


Ejemplo

goto se puede usar para saltar a una línea específica dentro del código, especificada por una etiqueta.

goto como a

Etiqueta:

void InfiniteHello()
{
    sayHello:
    Console.WriteLine("Hello!");
    goto sayHello;
}

Demo en vivo en .NET Fiddle

Declaración del caso:

enum Permissions { Read, Write };

switch (GetRequestedPermission())
{
    case Permissions.Read:
        GrantReadAccess();
        break;

    case Permissions.Write:
        GrantWriteAccess();
        goto case Permissions.Read; //People with write access also get read
}

Demo en vivo en .NET Fiddle

Esto es particularmente útil en la ejecución de múltiples comportamientos en una instrucción de conmutación, ya que C # no admite bloqueos de casos directos .

Reintento de excepción

var exCount = 0;
retry:
try
{
    //Do work
}
catch (IOException)
{
    exCount++;
    if (exCount < 3)
    {
        Thread.Sleep(100);
        goto retry;
    }
    throw;
}

Demo en vivo en .NET Fiddle

Al igual que en muchos idiomas, se desaconseja el uso de la palabra clave goto, excepto en los casos siguientes.

Usos válidos de goto que se aplican a C #:

  • Caso fallido en la declaración de cambio.

  • Descanso multinivel. LINQ a menudo se puede usar en su lugar, pero generalmente tiene un peor rendimiento.

  • Desasignación de recursos cuando se trabaja con objetos de bajo nivel no envueltos. En C #, los objetos de bajo nivel generalmente se deben envolver en clases separadas.

  • Máquinas de estados finitos, por ejemplo, analizadores; utilizado internamente por el compilador generado async / await máquinas de estado.