.NET с использованием блока и возврата; ключевое слово
Когда я говорю это
using (Entities db = new Entities())
{
return db.TableName.AsQueryable().ToList();
}
Я обойду функциональность использования блока, так как я возвращаю что-то, и метод выходит из него перед тем, как выйти из блока использования, поэтому я думаю, что используемый блок не будет служить для его цели и удалит ресурс.
Правильно ли это?
Ответы
Ответ 1
Вы ошибаетесь; он будет удален.
Оператор using
компилируется в блок try
/finally
, который предоставляет исходный объект в блоке finally
.
Блоки finally
всегда выполняются, даже если код внутри блока try
возвращает значение или генерирует исключение.
Ответ 2
using
оператор вызовет Dispose
объекта db до возврата значения.
Ответ 3
Нет, используемый блок заставит обстрел объекта Dispose.
http://www.devx.com/dotnet/Article/33167
http://msdn.microsoft.com/en-us/library/yh598w02(VS.80).aspx
Ответ 4
Ваше выражение использования действительно будет успешным. Это похоже на следующее (это то, что компилятор С# переводит оператор using в:
Entities db = new Entities();
try
{
return db.TableName.AsQueryable().ToList();
}
finally
{
((IDisposable)db).Dispose();
}