在IDisposable对象数组中Dispose()或不Dispose()元素?

Den*_*nis 7 .net c# vb.net idisposable

从.NET中的函数返回了大量的数组或IDisposable对象列表的示例.例如,Process.GetProcesses().

  • 如果我调用该方法,那么当我遍历它们时,我负责Dispose()所有数组成员吗?
  • 为什么它应该是我的责任,因为我从来没有创建过对象,我给出的数组只是指向我的代码之外创建的对象的指针.

我一直认为这是Dispose()的创造者的负担.那么这里适当的规则是什么?

Ser*_*rvy 8

没有一般规则.它将取决于具体情况,以及如何设计相关方法,以确定"你"是否负责处理您有权访问的对象.这是文档通常很重要的地方,可以帮助该类型的用户理解他们的职责.

我一直认为这是创作者的负担 Dispose()

这不可能是严格正确的.有时候,一次性对象会超出创建它的代码块的生命周期.虽然创建者可以处理对象时最简单,但有时它们根本不可能.当从方法返回一次性对象时,一种情况是创建一次性对象的代码通常不可能清理它,因为它的生命周期需要小于一次性对象的生命周期.

  • @WimOmbelets从一个生命周期大于一次性对象生命周期的方法创建一次性对象时,你可以使用`using`,一切都很好.当一次性对象需要超出声明它的方法时(当你从方法返回时往往会发生这种情况),`using`没有帮助). (2认同)