下面的'using'语句的版本I和II都有效,但我怀疑第一个版本是否有效,因为Visual Studio 2010中的C#垃圾收集器还没有删除变量“context”(实体框架变量) )。另一方面,我从一个看似有信誉的来源网上获得了第一个版本,所以我认为它没关系?
版本I:
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'语句?似乎是这样,但它是可疑的。
版本II:
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)
{
}
//以上编辑也很好并且工作正常 - 它比第一个版本更安全吗?
答案 0 :(得分:9)
它对编译的代码完全没有区别,因为外部using
语句的主体只是内部using
语句。我个人通常喜欢把括号括起来,因为如果你想在外部using
语句的开头和内部{{1}之间引入更多代码,那么它会更清楚。声明。但是,缩进也可以使这一点更加清晰。您的问题中的代码很难理解,因为它根本没有缩进,而我会使用这两种格式:
using
VS
using (...)
using (...)
{
// Body
}
单支撑版本的风险在于你最终意外地写了这个:
using (...)
{
using (...)
{
// Body
}
}
此时,代码不再按照执行流程执行您想要的操作。这将通常导致编译时错误,因为第二个using (...)
Log("Hello");
using (...)
{
// Body
}
语句通常依赖于第一个声明的资源,但并非总是如此。
答案 1 :(得分:0)
此处的效果相同,如果有多条线,则使用大括号,如果只有一条线则不需要,但为了便于阅读,您可以使用它
bool firstcondition = true;
bool secondcondtion = true;
if (firstcondition)
if (secondcondtion)
{
MessageBox.Show("inside");
MessageBox.Show("inside");
}