c#处理数据上下文



3个功能相同的例子:

方法1

Using使用大括号

public static int TicketsRequiringSupportResponse()
{
    int ReturnValue = 0;
    using (var dc = new CrystalCommon.MainContext())
    {
        ReturnValue = (dc.tblHelpCentreQuestions.Where(c => c.awaitingSupportResponse == true).Count());
    }
    return ReturnValue;
}

方法2

Using没有大括号

public static int TicketsRequiringSupportResponse()
{
    int ReturnValue = 0;
    using (var dc = new CrystalCommon.MainContext())
        ReturnValue = (dc.tblHelpCentreQuestions.Where(c => c.awaitingSupportResponse == true).Count());
    return ReturnValue;
}

3

方法

没有大括号,在using块内返回

public static int TicketsRequiringSupportResponse()
{
    using (var dc = new CrystalCommon.MainContext())
        return (dc.tblHelpCentreQuestions.Where(c => c.awaitingSupportResponse == true).Count());
}

所有这些都能妥善处理吗?方法3最简洁,代码最少,但我担心它不能正确处理,因为返回语句会中断。

是的,它们都做同样的事情。大括号只增加了显式的作用域;默认情况下,using只应用于下一条语句。从using返回仍然会处理(它本质上是一个尝试/最终在幕后)我的偏好是#3,但是为了清晰起见添加了大括号。

实际上,我认为方法1是最简洁的——我知道大括号是额外的,但它们有助于澄清/组织代码。在using块之外声明和返回变量可以使实时调试更容易。

它们都做同样的事情并正确地处置上下文。第一个和第二个完全一样。第一个和第二个都转换成以下代码:

int ReturnValue = 0;
Context dc = null;
try
{
    dc = new CrystalCommon.MainContext();
    ReturnValue = (dc.tblHelpCentreQuestions.Where(c => c.awaitingSupportResponse == true).Count());
}
finally
{
    if(dc != null)
        dc.Dispose();
}
return ReturnValue;

第三个翻译成:

Context dc = null;
try
{
    dc = new CrystalCommon.MainContext();
    return (dc.tblHelpCentreQuestions.Where(c => c.awaitingSupportResponse == true).Count());
}
finally
{
    if(dc != null)
        dc.Dispose();
}

因为finally块是在try块的作用域离开时执行的,所以这两个代码实际上是等价的。

@Talljoe解释得很好,它们都是等效的;我将添加的是第四个示例,它实际上只是演示Talljoe的详细信息,但对格式进行了轻微修改:

public static int TicketsRequiringSupportResponse()
{
    using (var dataContext = new CrystalCommon.MainContext())
    {
        return dataContext .tblHelpCentreQuestions.Where(
            question => question.awaitingSupportResponse == true).Count();
    }
}

注意,我们为using添加了范围括号,并进一步从返回语句中删除了多余的括号,然后简单地删除一行并缩进以允许更好的阅读流,而不是长行(然而,是有争议的)。我还尝试给DataContext和lambda参数一些描述性的名称。

相关内容

  • 没有找到相关文章

最新更新