从’using’块中调用’return’时会发生什么?
如果我有一个像这样的使用块的方法…
public IEnumerable GetPersons() { using (var context = new linqAssignmentsDataContext()) { return context.Persons.Where(p => p.LastName.Contans("dahl")); } }
…从using块中返回值,IDisposable对象是否仍然处理?
是的,它确实。 处理对象发生在finally块中,该块甚至在返回调用的情况下也执行。 它基本上扩展到以下代码
var context = new linqAssignmentsDataContext(); try { return context.Persons.Where(p => p.LastName.Contans("dahl")); } finally { if ( context != null ) { context.Dispose(); } }
从MSDN文档 :
using语句确保即使在对象上调用方法时发生exception,也会调用Dispose。 您可以通过将对象放在try块中然后在finally块中调用Dispose来实现相同的结果; 实际上,这就是编译器如何翻译using语句。
所以对象总是处理好的。 除非你插上电源线。