.NET с использованием блока и возврата; ключевое слово

Когда я говорю это

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

Я обойду функциональность использования блока, так как я возвращаю что-то, и метод выходит из него перед тем, как выйти из блока использования, поэтому я думаю, что используемый блок не будет служить для его цели и удалит ресурс.

Правильно ли это?

Ответ 1

Вы ошибаетесь; он будет удален.

Оператор using компилируется в блок try/finally, который предоставляет исходный объект в блоке finally.
Блоки finally всегда выполняются, даже если код внутри блока try возвращает значение или генерирует исключение.

Ответ 2

using оператор вызовет Dispose объекта db до возврата значения.

Ответ 4

Ваше выражение использования действительно будет успешным. Это похоже на следующее (это то, что компилятор С# переводит оператор using в:

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