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

时间:2015-08-11 01:07:28

标签: c# .net linq

鉴于我已经编写了一个实现IEnumerable的类,并返回IEnumerator,而不仅仅是IDisposable作为普查员,而是完成枚举后需要Dispose()所需的托管资源,只要我的枚举器在其{{1}中正确处理这些托管资源,我相信以下将Dispose()这些托管资源实施?

IDisposable

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

1 个答案:

答案 0 :(得分:7)

是的,您可以依赖于LINQ方法中迭代器上Dispose()的调用。

在Microsoft发布的reference code中,迭代器的使用分为三类:

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

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