【发布时间】:2012-03-26 19:10:21
【问题描述】:
我读过这样的用法:
using (myObject)
{
myObject.DoStuff();
}
可以这样想:
try
{
myObject.DoStuff();
}
finally
{
myobject.Dispose()
}
所以如果 myObejct.DoStuff 抛出 ExceptionA 然后 myObject.Dispose() 也抛出异常 (ExceptionB) 那么 ExceptionA 将丢失。 (请参阅MSDN examples here 以获得更好的描述。)
这是否意味着如果 using 块代码中的代码可能引发异常(这是大多数代码对吗?) 那么 using 语句是一种不好的做法?
【问题讨论】:
-
“可以这样想”有点轻描淡写。 :)
-
Dispose有什么业务抛出异常? -
@blzm 不完全是那段代码……那是 using 语句创建的代码的简化版本。
-
我个人更喜欢使用 try/catch 封装,以防 Dispose 抛出异常。但正如其他人已经提到的那样。如果 Dispose 一开始就抛出异常,那就真的有问题了。
-
@Vaccano:我不是说
Dispose不能抛出异常,我说它没有业务这样做。那些物体被打破了。幸运的是,Marc 展示了一种使用包装对象修复它们的方法。
标签: c# exception-handling using-statement