10

当我说这

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

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

这个对吗?

4

4 回答 4

15

你错了;它将处置。

using语句编译为try/finally块,该块将原始对象置于finally块中。
finally总是被执行,即使try块内的代码返回了一个值或抛出了异常。

于 2010-03-29T18:27:45.793 回答
3

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

于 2010-03-29T18:28:27.307 回答
1

不, using 块将强制触发 Dispose 对象。

http://www.devx.com/dotnet/Article/33167

http://msdn.microsoft.com/en-us/library/yh598w02(VS.80).aspx

于 2010-03-29T18:29:20.493 回答
1

您的 using 语句确实会成功。它类似于以下内容(这是 C# 编译器将 using 语句翻译成的内容:

Entities db = new Entities();
try
{
    return db.TableName.AsQueryable().ToList();
}
finally
{
    ((IDisposable)db).Dispose();
}
于 2010-03-29T18:29:31.350 回答