哪个版本的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 (...)
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");
                    }