2012-12-12 59 views
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; 
       } 
      } 

注:A similar question已經問,但我找到實例和答案奇怪。

+0

您可以參考上一個問題,您能提供一個鏈接或鏈接嗎?你覺得他們有什麼困惑,他們說什麼? – Servy

+0

這在[msdn文檔](http://msdn.microsoft.com/en-us/library/yh598w02.aspx)中有很好的解釋, –

回答

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。

3

您的交易將在退出使用區塊時自動處理。

這就像一個try-finally塊一樣在引擎蓋下工作。

所以沒有必要在自己的代碼

相關問題