一次性类如何检测是否存在异常?

时间:2009-11-13 00:40:45

标签: visual-studio-2008 c#-3.0 idisposable using-statement

我有一个实现IDisposable的类

public class Foo: IDisposable {
    public void Dispose() {
        // do the disposing
    }
}

然后我有一个以下列方式使用该类的方法:

void Bar() {
    using (var f = new Foo()) {
       // do whatever
    }  
}

当代码离开using {...}边界时,将调用Foo类上的Dispose方法。如何在Dispose方法中检测代码是自愿使用块还是由于异常而离开?

2 个答案:

答案 0 :(得分:1)

据我所知,你不能。考虑将Foo更改为将“body”包装并作为lambda执行的方法:

Foo(f => {
    // do whatever
});

然后,您的Foo实现可以将调用包装到try/catch中以检测异常并执行您想要执行的操作(然后使用throw;重新抛出)。

答案 1 :(得分:0)

你不应该这样做 - 我无法想象有办法做到这一点。

实现IDisposable的主要思想是确保在销毁对象时释放资源。

现在,using构造的主要思想是确保在它之后释放对象使用的所有资源。

因此,您不应该依赖为什么正在处理该对象以执行此操作。如果你这样做,你应该检查你的设计。