当使用"使用"时,我们有任何情况包括我们处理对象的catch块而不执行任何其他操作

Lea*_*ner 2 c# exception-handling using

在我学习的过程中,我偶然发现了这段代码.我在这里找到一个观察,即使作者正在使用"使用"块并创建"ts"对象,他在使用块内部使用try catch块,在catch部分中,他将对象"ts"显式调用Dispose方法.我觉得没必要.我不明白为什么他需要尝试并抓住这里,如果他必须"只处理对象".

我的问题:

  1. 我们真的需要尝试抓住这里吗?在什么情况下,它将在这个例子中起作用?

  2. 使用"使用"块时,这种方式是否正确?它在GC过程中如何反应?它的开销对吗?

感谢两个问题是否可以以初学者可以理解的方式解释.

using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    try
    {
        ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
        obj.UpdateData();
        ServiceReference2.Service1Client obj1 = new ServiceReference2.Service1Client();
        obj1.UpdateData();
        ts.Complete();
    }
    catch (Exception ex)
    {
        ts.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 5

这对我来说当然没必要.该using语句将编译为finally包装整个代码块的块,无论是否抛出异常,都将执行该块.

基本上,他写的是:

TransactionScope ts;
try
{
    ts = new TransactionScope(TransactionScopeOption.RequiresNew);
    try
    {
        ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
        obj.UpdateData();
        ServiceReference2.Service1Client obj1 = new ServiceReference2.Service1Client();
        obj1.UpdateData();
        ts.Complete();
    }
    catch (Exception ex)
    {
        ts.Dispose();
    }
}
finally
{
    ts.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

哪个有点傻.这是特别傻,他是完全无视(或"吞咽")除外.99.99999993%的时间,这是一个坏主意.