C# Try...finally
示例
如果迭代器方法的内部包含yieldtry...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
最终执行
观看演示