.NET使用块和返回;关键词

时间:2010-03-29 18:26:42

标签: .net using-statement

当我这样说时

using (Entities db = new Entities())
{
    return db.TableName.AsQueryable().ToList();
}

我是否绕过了使用块的功能,因为我返回了一些东西,并且该方法在退出using块之前退出,所以我认为using块不会用于它的目的并处理资源。

这是对的吗?

4 个答案:

答案 0 :(得分:15)

你错了; 将被处置。

using语句编译为try / finally块,用于将原始对象置于finally块中。
finally总是执行,即使try块中的代码返回值或引发异常。

答案 1 :(得分:3)

using语句将在返回值之前调用db对象的Dispose

答案 2 :(得分:1)

答案 3 :(得分:1)

您的使用声明确实会成功。它类似于以下内容(这是C#编译器将using语句转换为:

Entities db = new Entities();
try
{
    return db.TableName.AsQueryable().ToList();
}
finally
{
    ((IDisposable)db).Dispose();
}