从 using() 语句内部返回有任何副作用吗?

2024-01-19

返回一个方法值inside获取 DataContext 的 using 语句似乎总是有效fine, 像这样:

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;
    }
}

但我总觉得我应该这样关闭某事在我打破使用括号之前,例如通过定义交易beforeusing语句,获取它的值inside括号,然后返回after括号。

在 using 括号之外定义和返回变量是否是更好的做法或以任何方式节省资源?


不,我认为这样更清楚。不用担心,Dispose仍将被称为“正在退出” - 并且仅after返回值被完全评估。如果在任何时候抛出异常(包括评估返回值)Dispose仍然会被调用。

虽然你肯定could走更长的路线,这是两条额外的线,只是添加了多余的内容和额外的上下文来跟踪(精神上)。事实上,您并不真正需要额外的局部变量 - 尽管它在调试方面很方便。你could只要有:

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);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 using() 语句内部返回有任何副作用吗? 的相关文章

随机推荐