在using语句内或外使用return语句?

8

我应该在using语句内部还是外部执行return操作?

public IEnumerable<Foo> GetData()
{
    using (var db = new DbContext())
    {
        return db.Foo().ToList();
    }
}

或者

public IEnumerable<Foo> GetData()
{
    IEnumerable<Foo> foo;

    using (var db = new DbContext())
    {
        foo = db.Foo().ToList();
    }

    return foo;
}

无论如何:IL代码是相同的。但第一个代码片段更易读。 - Dmitry Bychenko
1
你没有收到任何错误,对吧?如果你有问题,那么MSDN通常应该是第一个检查的地方(它没有解释return,但是有finally)。但是拥有所有这些C#书籍作家在你的支持下是非常方便的! - Sinatr
2个回答

6

两种方式都可以。没有特别的技术原因将其放置在外面,所以可以根据自己的风格进行选择。从using语句中返回类似于从具有附加finallytry块中返回;无论哪种方式,finally块(在using情况下为显式的,或者是隐式的)都会被执行。


3

没关系,实际上同样的事情将会发生 - 也就是说,你即将返回的数据将在调用Dispose()方法后,在db对象上保存一段时间。

不同的商店喜欢不同的编码标准。例如,有些商店坚持除了最后一行不要有换行;在这种情况下,需要使用第二种选择。我更喜欢第一个片段,因为它用更少的变量和更少的代码来传达相同的意义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接