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

时间:2012-12-12 15:08:35

标签: c# .net

当我在对象上使用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;
                }
            }

注意:A similar question已被问到,但我发现示例和答案很奇怪。

2 个答案:

答案 0 :(得分:3)

退出使用区块时,您的交易将自动处理。

这就像一个try-finally块一样在幕后工作。

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

答案 1 :(得分:1)

配置对象是多余的。

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

相当于

ResourceType resource = CreateResource();

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

对于不可为空的值类型,省略了空检查,并且dynamic的处理也略有不同。有关详细信息,请参阅C# Language Specification中的8.13。