哪个版本的using语句是正确的或最安全的
本文关键字:安全 语句 版本 using | 更新日期: 2023-09-27 18:14:10
下面的'using'语句的版本I和II都可以工作,但我怀疑第一个版本只工作,因为Visual Studio 2010中的c#垃圾收集器没有删除变量"context"(实体框架变量)。另一方面,我从网上从一个看起来很有信誉的来源得到了第一个版本,所以我想它没问题吧?
版本我:
try
{
using ( AnEFEntity context = new AnEFEntity()) //note: no curly brackets!
using (var ts = new System.Transactions.TransactionScope())
{
// stuff here that uses variable context
}
}
catch (Exception ex)
{
}
//上面的编译和工作都很好,但是第一个' using '语句在作用域中吗?似乎是这样,但很可疑。
版本二:
try
{
using ( AnEFEntity context = new AnEFEntity())
{ //note a curly bracket used for first ‘using’
using (var ts = new System.Transactions.TransactionScope())
{
// stuff here that uses variable context
}
} //note the placement of the second curly bracket for the first
}
catch (Exception ex)
{
}
//上面的代码也可以很好地编译和工作——它比第一个版本更安全吗?
这对编译后的代码完全没有影响,因为外部using
语句的主体只是内部using
语句。就我个人而言,我通常更喜欢把大括号放进去,因为如果你想在外部using
语句的开始和内部using
语句之间引入更多的代码,这样会更清楚发生了什么。但是,缩进也可以使这一点更清楚。你的问题中的代码很难理解,因为它根本没有缩进,而我会使用像这样的两种格式:
using (...)
using (...)
{
// Body
}
和
using (...)
{
using (...)
{
// Body
}
}
单括号版本的风险是你最终会意外地写:
using (...)
Log("Hello");
using (...)
{
// Body
}
此时,代码不再按照你想要的执行流程执行。这通常会导致编译时错误,因为第二个using
语句通常依赖于第一个声明的资源,但并非总是如此。
这里也是同样的效果,如果有多行,如果只有一行,则不需要大括号但是为了可读性,可以使用
bool firstcondition = true;
bool secondcondtion = true;
if (firstcondition)
if (secondcondtion)
{
MessageBox.Show("inside");
MessageBox.Show("inside");
}