c#处理数据上下文

| 3个具有相同功能的示例: 方法1 使用大括号
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 使用没有括号
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最整洁,代码最少,但是我担心它不能正确处理,因为return语句会中断。     
已邀请:
是的,他们都做同样的事情。大括号仅添加显式范围;默认情况下,“ 3”仅适用于下一条语句。从“ 3”中退出仍然可以进行处理(本质上是尝试/最终在幕后)。我的偏好是#3,但是为了清楚起见添加了大括号。     
实际上,我想说方法1是最干净的IMO-我知道花括号是多余的,但是它们有助于阐明/组织代码。而且,在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();
}
因为在try块的作用域被保留时执行了finally块,所以这两个代码实际上是等效的。     
@Talljoe很好地解释了,它们都是等效的。我要添加的只是第四个示例,它实际上只是演示了Talljoe的详细信息,但对格式进行了一些修改:
public static int TicketsRequiringSupportResponse()
{
    using (var dataContext = new CrystalCommon.MainContext())
    {
        return dataContext .tblHelpCentreQuestions.Where(
            question => question.awaitingSupportResponse == true).Count();
    }
}
请注意,我们为ѭ3添加了范围括号,并进一步从return语句中删除了多余的括号,然后简单地放下一行并缩进以允许更好的读取流,而不是长行(但是long值得商de。) '还尝试给ѭ9和lambda参数赋予一些描述性名称。     

要回复问题请先登录注册