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();
    }
}

null許容でない値型の場合、nullチェックは省略され、dynamicわずかに異なる方法で処理されます。詳細については、 C#言語仕様の8.13を参照してください。

于 2012-12-12T15:12:45.670 に答える