C# Language vai a

Esempio

goto può essere utilizzato per passare a una riga specifica all'interno del codice, specificata da un'etichetta.

goto come:

Etichetta:

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

Live Demo su .NET Fiddle

Caso clinico:

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
}

Live Demo su .NET Fiddle

Ciò è particolarmente utile nell'esecuzione di più comportamenti in un'istruzione switch, in quanto C # non supporta i blocchi di casi fall-through .

Eccezione Riprova

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

Live Demo su .NET Fiddle

Simile a molte lingue, l'uso della parola chiave goto è sconsigliato tranne i casi di seguito.

Validi usi di goto che si applicano a C #:

  • Caso fall-through nell'istruzione switch.

  • Pausa multi-livello LINQ può essere usato spesso, ma di solito ha prestazioni peggiori.

  • Deallocazione delle risorse quando si lavora con oggetti di basso livello non aperti. In C #, gli oggetti di basso livello dovrebbero essere normalmente racchiusi in classi separate.

  • Macchine a stati finiti, ad esempio parser; utilizzato internamente dal compilatore generato async / await state machine.