为什么 using 语句在 IEnumerator 上起作用,它有什么作用?

rel*_*dom 5 c# language-lawyer

回到当我学习时foreach,我在某处读到:

foreach (var element in enumerable)
{
    // do something with element
}
Run Code Online (Sandbox Code Playgroud)

基本上相当于:

using (var enumerator = enumerable.GetEnumerator())
{
    while (enumerator.MoveNext())
    {
        var element = enumerator.Current;

        // do something with element
    }
}
Run Code Online (Sandbox Code Playgroud)

如果既没有IEnumerator也没有IEnumerator<T>实现,为什么这段代码甚至可以编译IDisposable?C# 语言规范似乎只usingIDisposable.

这样的using声明有什么作用?

小智 4

请检查以下有关foreach语句的链接。如果可能的话,它使用带有 Dispose 调用的 try/finally 块。这就是using语句后面的代码。