Is it a good approach to call return inside using {} statement?(使用 {} 语句在内部调用 return 是一种好方法吗?)
问题描述
我只想知道在 using
块内调用 return
是否安全/好方法.
I just want to know is it safe/ good approach to call return
inside a using
block.
例如
using(var scope = new TransactionScope())
{
// my core logic
return true; // if condition met else
return false;
scope.Complete();
}
我们知道最后一个大括号 dispose()
将被取消.但是在上述情况下会发生什么,因为 return
将控件跳出给定范围(AFAIK)...
We know the at the last most curly brace dispose()
will get called off. But what will be in the above case, since return
jumps the control out of the given scope (AFAIK)...
- 我的
scope.Complete()
被调用了吗? - 作用域的
dispose()
方法也是如此.
- Is my
scope.Complete()
get called? - And so for the scope's
dispose()
method.
推荐答案
在 using
块中调用 return
是完全安全的,因为 using 块只是一个 try/finally
块.
It's perfectly safe to call return
inside your using
block, since a using block is just a try/finally
block.
在上面的示例中,在返回 true
之后,范围将被释放并返回值.return false
,scope.Complete()
将不会被调用.然而,Dispose
将被调用,因为它位于 finally 块中.
In your example above after return true
, the scope will get disposed and the value returned. return false
, and scope.Complete()
will not get called. Dispose
however will be called regardless since it reside inside the finally block.
您的代码与此基本相同(如果这样更容易理解的话):
Your code is essentially the same as this (if that makes it easier to understand):
var scope = new TransactionScope())
try
{
// my core logic
return true; // if condition met else
return false;
scope.Complete();
}
finally
{
if( scope != null)
((IDisposable)scope).Dispose();
}
请注意,您的事务将从不提交,因为无法通过 scope.Complete()
提交事务.
Please be aware that your transaction will never commit as there's no way to get to scope.Complete()
to commit the transaction.
这篇关于使用 {} 语句在内部调用 return 是一种好方法吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用 {} 语句在内部调用 return 是一种好方法吗?
- 输入按键事件处理程序 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- C# 中多线程网络服务器的模式 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01