2012-12-12 27 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块一样在引擎盖下工作。

所以没有必要在自己的代码

相关问题