C# Language Essayez ... enfin


Exemple

Si une méthode itérative a un rendement dans un try...finally , le IEnumerator retourné exécutera l'instruction finally lorsque Dispose sera appelée, tant que le point d'évaluation actuel se trouve dans le bloc try .

Vu la fonction:

private IEnumerable<int> Numbers()
{
    yield return 1;
    try
    {
        yield return 2;
        yield return 3;
    }
    finally
    {
        Console.WriteLine("Finally executed");
    }
}

En appelant:

private void DisposeOutsideTry()
{
    var enumerator = Numbers().GetEnumerator();

    enumerator.MoveNext();
    Console.WriteLine(enumerator.Current);
    enumerator.Dispose();
}

Ensuite, il imprime:

1

Voir la démo

En appelant:

private void DisposeInsideTry()
{
    var enumerator = Numbers().GetEnumerator();

    enumerator.MoveNext();
    Console.WriteLine(enumerator.Current);
    enumerator.MoveNext();
    Console.WriteLine(enumerator.Current);
    enumerator.Dispose();
}

Ensuite, il imprime:

1
2
Enfin exécuté

Voir la démo