IDbCommand
расположен правильно. Как правило, при возврате из оператора using вы можете это сделать, если:
- То, что вы возвращаете, не входит в пункт об использовании
Заявление
- Возвращаемая вещь не является ссылкой, созданной в блоке оператора using.
В первом случае оператор using избавится от того, что вы пытаетесь вернуть, а во втором случае переменная выйдет из области видимости.
1012 *, например *
//this is fine as result is createsd outside the scope of the block.
bool result = false;
using (SmtpClient mailClient = new SmtpClient())
{
try
{
mailClient.Send(...);
result = true;
}
catch(SmtpException)
{
result = false;
}
finally
{
return result;
}
}
Здесь утверждение using(){ ... }
- наш друг. Когда мы выходим из блока, наш SmtpClient
удаляется, и результирующее условие все еще будет существовать для использования вами.
Однако, скажем, мы пишем приложение WinForm или приложение WPF и оборачиваем блок using вокруг нашего контекста данных, а затем создаем проблему, поскольку контекст исчезает, прежде чем элемент управления сможет его использовать.
// this will fail when you bind the customers to a form control!
using (DbContext context = new DBContext())
{
context.Customers.Where(c => c.Name.Contains("Bob")).Load();
return context.Customers.Local;
}
Здесь заявление using(){ ... }
причиняет нам боль. Как и в случае, когда мы обращаемся к dataBind нашего клиента к GridView (или другому такому элементу управления, связанному с данными), тот факт, что мы избавились от DbContext
, будет означать, что нашей форме нечего связывать, поэтому она выдаст исключение!
НТН