2

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

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

即使用是否会触发Dispose,即使它在内部返回?

4

4 回答 4

5

这相当于:

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

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

于 2013-09-19T14:06:25.820 回答
4

是的。无论块如何留下,资源都会被释放。这是using-block 的值。

于 2013-09-19T14:01:53.480 回答
2

是的,它会正确处理。

于 2013-09-19T14:01:49.900 回答
0

是的,一旦流超出范围,它将被处置。

于 2013-09-19T14:03:15.750 回答