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

标签 c# .net linq

假设我已经编写了一个实现 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/

相关文章:

c# - Linq返回第一个日期

c# - 所有单元格的Datagridview背景颜色

.net - Visual Studio - 未启用所有调试控件

c# - 为什么在此示例中 LINQ 更快

.net - 如何在 protobuf-net 中启用字符串实习?

c# - Unity 中的递归和 Dispose 模式实现

c# - LINQ to SQL 在和不在

c# - 多任务处理多个类实例

c# - 在 C# 中是否有对字节数组进行循环位移的函数?

c# - asp.net 核心服务定位器如何在控制台应用程序中避免