【发布时间】:2023-08-29 02:56:02
【问题描述】:
这两个代码示例有什么区别吗?如果没有,为什么using 存在?
StreamWriter writer;
try {
writer = new StreamWriter(...)
writer.blahblah();
} finally {
writer.Dispose();
}
对比:
using (Streamwriter writer = new Streamwriter(...)) {
writer.blahblah
}
我的意思是,在第二个示例中,您确实应该将它放在 try 块中,因此添加 finally 块确实不会花费更多的精力。我知道整个事情可能包含在一个更大的 try 块中,但是是的,这对我来说似乎是多余的。
【问题讨论】:
-
“你真的应该把它放在 try 块中” 为什么?您可以允许任何异常冒泡到堆栈顶部,并在日志中留下清晰的消息和堆栈跟踪。
-
foreach也是如此,它只是调用迭代器方法和属性的更简洁的版本。 -
您的 try/finally 样本有缺陷,using(){} 块将正常工作。
-
我一直听说在 Dispose 方法执行期间抛出异常时,
Using语句似乎与Try-Finally块相比没有用。我还看到 this MSDN 文章对 WCF 客户端说同样的话。
标签: c# try-catch dispose using streamwriter