Enumerable.Range
yield return
メソッド本体で使用します。このステートメントは、コンパイラの魔法の下で、次のようにyield return
実装する匿名型を生成します。IDisposable
static IEnumerable<int> GetNumbers()
{
for (int i = 1; i < 10; i += 2)
{
yield return i;
}
}
コンパイル後、次のような匿名のネストされたクラスがあります。
[CompilerGenerated]
private sealed class <GetNumbers>d__0
: IEnumerable<int>, IEnumerable, IEnumerator<int>, IEnumerator, IDisposable
{
//the implementation
//note the interface is implemented explicitly
void IDisposable.Dispose() { }
}
したがって、結果is
はIDisposable
。この例では、Dispose
メソッドは空のままです。その理由は、処分する必要がないからだと思います。yield return
管理されていないリソースを含むタイプの場合、異なるコンパイル結果が得られる可能性があります。(それについてはよくわかりません)