哪个版本的using语句是正确还是最安全的?

时间:2011-11-12 09:05:14

标签: c# visual-studio using-statement

下面的'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)
{
}

//以上编辑也很好并且工作正常 - 它比第一个版本更安全吗?

2 个答案:

答案 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");
                    }