Looking for c# Keywords? Try Ask4Keywords

C# Language Попробуйте ... наконец-то


пример

Если метод итератора имеет выход внутри try...finally , возвращаемый IEnumerator выполнит оператор finally когда Dispose вызывается на нем, если текущая точка оценки находится внутри блока try .

С учетом функции:

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

При звонке:

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

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

Затем он печатает:

1

Посмотреть демо

При звонке:

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

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

Затем он печатает:

1
2
Наконец выполнен

Посмотреть демо