假设我已经编写了一个实现 IEnumerable
的类,并返回一个 IEnumerator
,它不仅仅是 IDisposable
的枚举器,但是在完成枚举后,由于拥有它需要 Dispose()
的托管资源,我是否可以相信只要我的枚举器正确,以下将 Dispose()
这些托管资源在其 IDisposable
实现中处理这些托管资源?
return (new MyClass()).Select(x => x);
编辑:这个问题看起来与标记为类似它的一个模组相似,但它在语义上是不同的 IMO(我在提出问题之前看到了它)
最佳答案
是的,您可以从 LINQ 方法内部对迭代器调用 Dispose()
。
在reference code由 Microsoft 发布,迭代器的使用分为三类:
- 迭代器在
foreach
循环中使用,确保调用Dispose()
,或 - 迭代器与
while
循环结合使用;这些迭代器被显式处置 - 迭代器在
using
block 中获取,确保自动处理。
在所有这些情况下,库确保迭代器的 Dispose()
方法在完成时被调用。
关于c# - LINQ IEnumerable 扩展是否在其 IEnumerable 上调用 Dispose?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31931596/