LINQ IEnumerable扩展是否在其IEnumerable上调用Dispose?

hum*_*log 16 .net c# linq

鉴于我已经编写了一个实现的类IEnumerable,并返回一个IEnumerator不仅仅是IDisposable作为枚举器本质的类,而是通过在Dispose()枚举完成后拥有所需的托管资源,我是否可以信任以下Dispose()那些托管资源只要我的枚举器在其IDisposable实现中正确处理了这些托管资源?

return (new MyClass()).Select(x => x);
Run Code Online (Sandbox Code Playgroud)

编辑:这个问题看似类似于一个类似于它的mods,但它在语义上是不同的IMO(我在提出问题之前就看到了它)

das*_*ght 9

是的,您可以依赖于Dispose()LINQ方法内部对迭代器的调用.

在Microsoft发布的参考代码中,迭代器的使用分为三类:

  • 迭代器在foreach循环中使用,确保调用Dispose(),或
  • 迭代器与while循环一起使用; 这些迭代器是明确处理的
  • using块内获得迭代器,确保自动处理.

在所有这些情况下,库确保Dispose()在完成时调用迭代器的方法.