Нет, мне кажется, так понятнее. Не волнуйтесь, Dispose
будет по-прежнему вызываться "на выходе" - и только после возвращаемое значение будет полностью оценено. Если в какой-то момент выдается исключение (включая оценку возвращаемого значения), Dispose
также будет вызываться.
Хотя вы, конечно, могли бы выбрать более длинный маршрут, это две дополнительные строки, которые просто добавляют кавычки и дополнительный контекст для отслеживания (мысленно). На самом деле вам не нужна дополнительная локальная переменная - хотя это может быть удобно с точки зрения отладки. Вы могли бы просто иметь:
public static Transaction GetMostRecentTransaction(int singleId)
{
using (var db = new DataClasses1DataContext())
{
return (from t in db.Transactions
orderby t.WhenCreated descending
where t.Id == singleId
select t).SingleOrDefault();
}
}
Действительно, у меня даже может возникнуть соблазн использовать точечную запись и поставить условие Where
в SingleOrDefault
:
public static Transaction GetMostRecentTransaction(int singleId)
{
using (var db = new DataClasses1DataContext())
{
return db.Transactions.OrderByDescending(t => t.WhenCreated)
.SingleOrDefault(t => t.Id == singleId);
}
}