当我在对象上使用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 :(得分: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。