【问题标题】:Stop Code executing in query停止在查询中执行的代码
【发布时间】:2013-02-14 13:26:45
【问题描述】:

我正在检查重复项并找到它们,并且 If(isDuplicate) 一切正常。 但是代码继续执行所有提交,因为我没有告诉它停止。 我该怎么做?停止并抛出它已提交但未提交的错误面板?

_db.tbl_Localities.InsertOnSubmit(locality);

bool isDuplicate = _db.tbl_Localities
                    .Any(x => x.Locality == txt_Locality.Text);
if (isDuplicate)
{
    pnl_Message.Visible = true;
    lbl_message.Text = " Duplicate entry!";
    txt_Locality.Text = "";
}

// Save
// ====
_db.SubmitChanges();

【问题讨论】:

  • 可能会将 Save 部分移动到 else 语句中,因此只有在 isDuplicate 评估为 false 时才会完成。没有剩下的代码很难分辨。
  • 谢谢它总是最明显的.. :-)

标签: c# asp.net linq-to-sql


【解决方案1】:

在 if 语句中使用return;

【讨论】:

  • 我绝不会建议在函数末尾使用 return 语句。在尝试维护代码时,它们很容易被忽略,并使得以后重构代码变得更加困难。
  • @JustinHarvey 好吧,我认为在很多情况下return 是合适的。例如。保护条件,或从 switch 语句返回
  • @JustinHarvey 你在这里可能是正确的。我目前正在编写一些他们坚持认为的代码。它只创建了 10 层深的嵌套 if 语句,这里可能是另一个问题;)。在 void 中使用 return 与验证有关,这比在我眼中嵌套 if 语句要好。 Is it bad practice to use return inside a void method?
  • @lazyberezovsky,在我看来,你的例子都不是借口。
  • @Justin 在我看来,真正的问题是当您无法在一个屏幕上看到所有功能时。如果函数重构得很好,我没有遇到你的问题。
【解决方案2】:

您应该处理else 部分条件,或者如果您的程序出现意外情况,则引发异常:

_db.tbl_Localities.InsertOnSubmit(locality);

bool isDuplicate = _db.tbl_Localities
                    .Any(x => x.Locality == txt_Locality.Text);
if (isDuplicate)
{
    pnl_Message.Visible = true;
    lbl_message.Text = " Duplicate entry!";
    txt_Locality.Text = "";
}
else
{
    // Save
    // ====
    _db.SubmitChanges();
}

【讨论】:

    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    相关资源
    最近更新 更多