喜欢的东西:
using (IDisposable disposable = GetSomeDisposable())
{
//.....
//......
return Stg();
}
我想这里不适合做退货声明,对吧?
喜欢的东西:
using (IDisposable disposable = GetSomeDisposable())
{
//.....
//......
return Stg();
}
我想这里不适合做退货声明,对吧?
当前回答
正如其他几个人指出的那样,一般来说,这不是一个问题。
唯一会给你带来问题的情况是,如果你在using语句中间返回,并额外返回in using变量。但是,即使您不返回,而只是保留对变量的引用,这也会导致问题。
using ( var x = new Something() ) {
// not a good idea
return x;
}
同样糟糕
Something y;
using ( var x = new Something() ) {
y = x;
}
其他回答
这完全可以接受。using语句确保IDisposable对象无论如何都会被释放。
从MSDN:
using语句确保即使在调用对象上的方法时发生异常,也会调用Dispose。你可以通过将对象放在try块中,然后在finally块中调用Dispose来实现相同的结果;事实上,这就是编译器如何翻译using语句的。
这将工作得非常好,就像在try{}finally{}中间返回一样
绝对没问题,一点问题都没有。你为什么认为这是错的?
using语句只是try/finally块的语法糖,正如Grzenio所说,从try块返回也很好。
返回表达式将被求值,然后finally块将被执行,然后该方法将返回。
完全没问题。
你显然是这么想的
using (IDisposable disposable = GetSomeDisposable())
{
//.....
//......
return Stg();
}
被盲目地翻译成:
IDisposable disposable = GetSomeDisposable()
//.....
//......
return Stg();
disposable.Dispose();
不可否认,这将是一个问题,并将使using语句变得毫无意义——这就是为什么它不是这样做的。
编译器确保对象在控件离开块之前被释放——不管它如何离开块。
正如其他几个人指出的那样,一般来说,这不是一个问题。
唯一会给你带来问题的情况是,如果你在using语句中间返回,并额外返回in using变量。但是,即使您不返回,而只是保留对变量的引用,这也会导致问题。
using ( var x = new Something() ) {
// not a good idea
return x;
}
同样糟糕
Something y;
using ( var x = new Something() ) {
y = x;
}