【发布时间】:2010-12-21 09:23:37
【问题描述】:
我们正在研究 C# 中的一种编码模式,我们希望在其中使用带有特殊类的“using”子句,其 Dispose() 方法会根据“using”主体是否正常退出或有一个例外。
据我所知,CLR 会跟踪当前正在处理的异常,直到它被“catch”处理程序使用。但是,尚不清楚此信息是否以任何方式公开以供代码访问。你知道它是不是,如果是,如何访问它?
例如:
using (var x = new MyObject())
{
x.DoSomething();
x.DoMoreThings();
}
class MyObject : IDisposable
{
public void Dispose()
{
if (ExceptionIsBeingHandled)
Rollback();
else
Commit();
}
}
这看起来几乎像System.Transactions.TransactionScope,除了成功/失败不是由对x.Complete() 的调用确定,而是基于using 主体是否正常退出。
【问题讨论】:
-
我想你需要问问你为什么要这么做。 Dispose() 模式并非旨在通过引发异常来实现控制逻辑。
-
质疑整个想法总是公平的。我明白这不是“使用”的意思。我很欣赏它会导致错误的代码。我仍然对答案感兴趣:)
-
为什么这个问题被否决了?
-
"using" 语句被转换为 'try/finally' 块 & 对象被释放。
标签: c# .net exception-handling using-statement