Mar*_*rio 1 c# dispose exception try-catch
我在构造函数中实例化一个一次性对象(在我的例子中是一个FileStream),需要对它进行一些工作.但是,这可能会引发任何数量的不同异常.现在我甚至不想过多地处理这些异常,并希望允许它们传播给调用者.但是,我需要先处理对象.现在最好的方法是什么?现在我只能想到这样的事情:
IDisposable disposableObject = InstantiateDisposable();
bool error = false;
try
{
DoWork(disposableObject);
}
catch (ReallyBadException e)
{
error = true;
throw new EvenWorseException("some message", e);
}
catch (Exception)
{
error = true;
throw;
}
finally
{
if (error) disposableObject.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
这是否正确或在某些特殊情况下是否会跳过Dispose()?有更简单的方法吗?它有点麻烦,如果你因为某种原因需要分别捕获一堆不同的异常,你总是需要复制并粘贴那个error = true;位.
编辑:
只是为了澄清:我只需要在DoWork()失败/抛出异常时处置该对象.如果这个方法成功,我不想暂时处理这个对象,因为稍后会有更多的工作要做.
为什么不颠倒逻辑呢?
IDisposable disposableObject = InstantiateDisposable();
bool error = true;
try
{
DoWork(disposableObject);
error = false; // if it gets to this line, no exception was thrown
}
catch (ReallyBadException e)
{
throw new EvenWorseException("some message", e);
}
finally
{
if (error) disposableObject.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1145 次 |
| 最近记录: |