返回从方法值内 using语句是得到一个DataContext似乎总是工作精细,就像这样:
public static Transaction GetMostRecentTransaction(int singleId)
{
using (var db = new DataClasses1DataContext())
{
var transaction = (from t in db.Transactions
orderby t.WhenCreated descending
where t.Id == singleId
select t).SingleOrDefault();
return transaction;
}
}
Run Code Online (Sandbox Code Playgroud)
但是我总是觉得在打破使用括号之前我应该关闭一些东西,例如在using语句之前定义事务,在括号内获取它的值,然后在括号后返回.
将变量定义并返回到使用括号之外是更好的做法还是以任何方式保存资源?
Jon*_*eet 161
不,我觉得这样更清楚.不用担心,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();
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,我甚至可能会想要使用点符号,并将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);
}
}
Run Code Online (Sandbox Code Playgroud)
Adr*_*der 31
看看这个
CLR将您的代码转换为MSIL.而using语句被转换为try和finally块.这就是在IL中表示using语句的方式.使用声明分为三个部分:获取,使用和处置.首先获取资源,然后将使用情况包含在带有finally子句的try语句中.然后该对象将被置于finally子句中.
归档时间: |
|
查看次数: |
23264 次 |
最近记录: |