2

当我在对象上使用 using 子句时,我应该在退出 using 块之前处理该对象吗?

            using (var transaction = TransactionUtils.CreateTransactionScope())
            {
                try
                {
                    _entity.Save(entity);
                    transaction.Complete();
                }
                catch // or better finally
                {
                    transaction.Dispose(); // Is this try-catch usefull?
                    throw;
                }
            }

注意: 已经提出了类似的问题,但我发现示例和答案很奇怪。

4

2 回答 2

3

退出 using 块时,您的交易将自动处理。

这就像一个 try-finally 块一样在引擎盖下工作。

因此无需从您的代码中处理交易手册

于 2012-12-12T15:10:23.533 回答
1

配置对象是多余的。

using (ResourceType resource = CreateResource())
{
    DoStuffWith(resource);
}

相当于

ResourceType resource = CreateResource();

try
{
    DoStuffWith(resource);
}
finally
{    
    if (resource != null)
    {
        ((IDisposable)resource).Dispose();
    }
}

对于不可为空的值类型,空检查被省略,dynamic处理方式也略有不同。有关更多详细信息,请参阅C# 语言规范中的 8.13 。

于 2012-12-12T15:12:45.670 回答