【问题标题】:Why is the Or Operator not working? [duplicate]为什么 Or 运算符不起作用? [复制]
【发布时间】:2018-08-06 21:32:50
【问题描述】:

我正在尝试关闭每个打开的表单,只要它的名称与特定表单名称不匹配(某些表单应该保持打开状态),但它并没有像我认为的那样工作,我不知道为什么。

我使用 for each 循环和 Application.OpenForms 将表单存储在一个列表中(当我尝试粘贴此代码时,格式不起作用)。

然后我使用另一个 foreach 循环将列表中的表单名称与我想要保持打开的名称进行比较。当循环到达 frmMain 时,if 语句返回 true 并关闭表单,从而关闭应用程序。

如果我删除 if 语句的 OR 部分,则 if 语句变为: if(form.Name != frmMain) 那么它就可以正常工作了。

            //Close all user dependant forms that might be open.
            foreach (Form form in forms)
            {
                if(form.Name != "frmMain" || form.Name != "frmDice")
                {
                    form.Close();
                }
            }

为什么代码不能在 if 语句中使用 OR?

【问题讨论】:

  • if 条件始终为真,我想你的意思是 &&。
  • 因为你的测试总是会得到满足,它总是不会至少等于其中一个。也许您想使用 AND?
  • 单步调试,检查locals会显示逻辑错误

标签: c# if-statement


【解决方案1】:

因为你需要使用&&,而不是||。
如果一个表单被命名为 "frmMain" 它不能也被命名为 "frmDice" -
因此对于"frmMain",条件的form.Name != "frmDice" 部分将返回true,当然,当表单命名为"frmDice" 时也是如此——条件的form.Name != "frmMain" 部分将返回true .

这意味着所有表单都将以您当前的状态关闭。

将您的条件更改为if(form.Name != "frmMain" && form.Name != "frmDice")。

当然也可以表示为if(!(form.Name == "frmMain" || form.Name == "frmDice")),不过个人觉得不太可读。

【讨论】:

  • 谢谢!我也很感谢你向我解释。自从我实际进行任何编码以来已经有一段时间了,所以即使这是一个简单的错误,我也无法弄清楚:D
  • 很高兴为您提供帮助 :-)
【解决方案2】:

您的条件将始终解析为真。为了不正确,名称应该同时是“frmMain”和“frmDice”,这是不可能的。我想你想要的是 !( form.Name == "frmMain" || form.Name == "frmDice" ) 或者,或者, ( form.Name != "frmMain" && form.Name != "frmDice" )

【讨论】:

  • 哈!当您弹出您的答案时,我正在编辑该选项来回答我的答案... +1,因为我的想法快了 20 秒 :-)
猜你喜欢
  • 1970-01-01
  • 2022-06-28
  • 1970-01-01
  • 2018-12-28
  • 2020-08-14
  • 1970-01-01
  • 2015-07-06
  • 2017-03-16
  • 1970-01-01
相关资源
最近更新 更多