【问题标题】:Else if evaluates bool incorrectly否则,如果错误地评估 bool
【发布时间】:2013-04-02 06:54:27
【问题描述】:

这是我的代码:

if (addNewRecord == false)
        { MessageBox.Show("No action selected. \nSave cancelled."); }
else if (editCurrentRecord == false)
        { MessageBox.Show("No action selected. \nSave cancelled."); }
else{.....}

addNewRecordeditCurrentRecord 都是我检查过的具有 true 值的布尔值。当我按照上述操作时,消息框仍会显示为布尔值是false。但是,如果我只注释掉ELSE IF,它将继续使用ELSE。我在这里错过了一些基本的东西吗?感谢您的任何意见。

编辑:两个消息框不只显示一个。我在使用 MessageBox.Show(addNewRecord.ToString()); 的 IF 语句之前检查两个布尔值的值;对于另一个布尔值也是如此。他们正在按预期工作。仅当我尝试使用 else if 或使用 OR 语句评估这两个布尔值时才会出现问题。

以下是所有相关代码:

namespace E_Z_Rent
{
public partial class Bookings : Form
{
    bool addNewRecord = false;
    bool editCurrentRecord = false;

    public Bookings()
    {
        InitializeComponent();
    }

    private void bookingsBindingNavigatorSaveItem_Click(object sender, EventArgs e)
    {
        MessageBox.Show(addNewRecord.ToString());
        MessageBox.Show(editCurrentRecord.ToString());
        if (addNewRecord == false)
        { MessageBox.Show("No action selected. \nSave cancelled."); }
        else if (editCurrentRecord == false)
        { MessageBox.Show("No action selected. \nSave cancelled."); }
        else
        {
            MessageBox.Show("OK");
        }
    }

    private void EditFieldsCheckBox_CheckedChanged(object sender, EventArgs e)
    {
        if (EditFieldsCheckBox.Checked == true)
        {
            editCurrentRecord = true;
        }
        else 
        {
            editCurrentRecord = false;
        }
    }

    private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)
    {
        addNewRecord = true;
    }
}
}

我已经让它按预期工作了:

   if (addNewRecord == true || editCurrentRecord == true){
          MessageBox.Show("OK");
      }
      else
      {
          MessageBox.Show("No action selected. \nSave cancelled.");
      }

我仍然对此感到困惑,所以如果其他人能说出为什么会发生这种情况,我会回来查看。谢谢大家的建议。

【问题讨论】:

  • 你说的是不可能的。
  • 尝试重构 if (!addNewRecord || !editCurrentRecord)) { MessageBox.show(...); } 其他 { .... }
  • 我不相信这两个布尔值都是错误的。用一个独立的测试用例来证明它。否则,寻找竞争条件,检查错误的变量等。
  • 你是说 both 消息框都在显示吗?
  • 无论如何,我建议更改消息,使它们不同。 “(1) 未选择任何操作。\n保存已取消。”和“(2) 未选择任何操作。\n保存已取消。”用于调试目的就足够了。

标签: c# boolean if-statement


【解决方案1】:

你的算法是错误的。 只有当 addNewRecord 和 editCurrentRecord 都为真时,您才会进入最后的 else 案例。 如果有任何错误,您将弹出“未选择操作”消息。

【讨论】:

    【解决方案2】:

    看来你想这样做;

    if (addNewRecord == false || editCurrentRecord == false)
            { MessageBox.Show("No action selected. \nSave cancelled."); }
    else{.....}
    

    【讨论】:

    • 你的意思是|| 而不是&&
    • 一开始我写的是||但是当我建议使用 && 时。正如其他人所说,我认为我们在谈论对问题的误解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2022-11-30
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多