c# - 当从 'return' block 中调用 'using' 时会发生什么?

标签 c# idisposable using-statement

<分区>

如果我有一个像这样的 using block 的方法...

    public IEnumerable<Person> GetPersons()
    {
        using (var context = new linqAssignmentsDataContext())
        {
            return context.Persons.Where(p => p.LastName.Contans("dahl"));
        }
    }

...从 using block 中返回值,IDisposable 对象是否仍被释放?

最佳答案

是的。对象的处置发生在 finally block 中,该 block 即使在返回调用时也会执行。它本质上扩展为以下代码

var context = new linqAssignmentsDataContext();
try {
  return context.Persons.Where(p => p.LastName.Contans("dahl"));
} finally {
  if ( context != null ) {
    context.Dispose();
  }
}

关于c# - 当从 'return' block 中调用 'using' 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2284753/

相关文章:

c# - 不好的做法? c# 的 using 语句的非规范用法

c# - 使用语句中的 MemoryStream - 我是否需要调用 close()

c# - 添加 .ToArray 或 .ToList 是否总能使数据库查询更快?

c# - 分组分组的最佳方法是什么?

c# - 在 System.Windows.Form 派生类中的何处配置资源?

c# - 在终结器线程中诊断 NullReferenceException

c# - .Net 中 finalize 的成本

c# - 我如何知道使用 'using' 的最佳位置?

c# - 多线程单生产者多消费者实现

c# - EF4 - 多对多关系,使用 contains 和 List<int> 进行查询