C# 为什么Or操作员不工作?

C# 为什么Or操作员不工作?,c#,if-statement,C#,If Statement,我试图关闭每个打开的表单,只要它的名称与特定的表单名称不匹配(某些表单应该保持打开状态),但它没有像我认为的那样工作,我不知道为什么 我使用for-each循环和Application.OpenForms将表单存储在列表中(当我尝试粘贴此代码时,格式不起作用) 然后,我使用另一个foreach循环将列表中表单的名称与我希望保持打开状态的名称进行比较。当循环到达frmMain时,if语句返回true,表单关闭,从而关闭应用程序 如果我删除If语句的或部分,则If语句变为: if(form.Name

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

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

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

如果我删除If语句的或部分,则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语句一起使用或在if语句中使用?

因为您需要使用
&&
,而不是
|

如果表单名为
“frmMain”
,则不能同时将其命名为
“frmDice”
-
因此,对于
“frmMain”
form.Name!=“frmDice”
条件的一部分将返回
true
,当然,当表单名为
“frmDice”
-表单名称!=“frmMain”部分条件将返回
true

这意味着所有表单都将按照当前的条件关闭

将条件更改为
if(form.Name!=“frmMain”&&form.Name!=“frmDice”)


当然,如果(!(form.Name==“frmMain”| | form.Name==“frmDice”),它也可以表示为
,但我个人认为可读性较差。

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

如果条件始终为真,我想您的意思是&。因为您的测试将始终得到满足,所以它始终不会至少等于其中一个。也许你想用和?单步调试,检查本地会显示逻辑错误谢谢!我也很感谢你给我解释。我已经有一段时间没有真正做过任何编码了,所以即使是一个简单的错误,我也无法理解它:DGlad to help:-)哈!我是在编辑这个选项的时候我的答案当你的弹出…1.与我的想法相同,比我快20秒:-)