为什么“或”运算符不起作用?

时间:2018-08-06 21:32:51

标签: c# if-statement

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

我为每个循环和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配合使用?

2 个答案:

答案 0 :(得分:2)

因为您需要使用&&,而不是||
如果表单命名为"frmMain",那么它也不能命名为"frmDice"-
因此对于"frmMain",条件的form.Name != "frmDice"部分将返回true,当然,当表单命名为"frmDice"-{{1} }部分条件将返回form.Name != "frmMain"

这意味着所有表格将根据您当前的条件关闭。

将您的条件更改为true

当然,它也可以表示为if(form.Name != "frmMain" && form.Name != "frmDice"),但我个人认为它的可读性较差。

答案 1 :(得分:1)

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