C#从使用块内返回

时间:2013-09-19 14:01:00

标签: c#

这样的构造会正确处理文件句柄吗?

void bla() {
    using (var stream = new new System.IO.StreamReader( filename)) {
        return DoSomethingWithTheStream(stream);
    }
}

即。即使在内部返回,use也会触发Dispose吗?

4 个答案:

答案 0 :(得分:5)

这相当于:

var stream = new StreamReader(fileName);
try {
    return DoSomethingWithTheStream(stream);
}
finally {
    stream.Dispose();
}

由于最终的子句可以保证执行,因此可以保证在从方法返回之前处理流。

答案 1 :(得分:4)

是。无论块如何离开,资源都被处理掉。这是using - 块的值。

答案 2 :(得分:2)

是的,它会正确处理。

答案 3 :(得分:0)

是的,一旦流程超出范围,它就会被处理掉。