C# 如果语句的工作方式与预期不同
这可能是一个愚蠢的问题,也可能不是,但为什么下面两个if语句的结果会不同呢 让我们说C# 如果语句的工作方式与预期不同,c#,C#,这可能是一个愚蠢的问题,也可能不是,但为什么下面两个if语句的结果会不同呢 让我们说k=“z” 如果(!k==“x”| |!k==“y”) { //做点什么 } 二, 在我看来,这两种说法都应该做点什么。。。。只有最下面的一个会被击中。顺便说一句,这是预期的结果 再一次抱歉,但是我不能把我无知的头脑绕到这一点上。这是因为您不理解逻辑表达式求值。进一步阅读请参见维基百科页面,但您需要的要点是这一点 !(A | | B)与相同!A&&!B 这不是一个愚蠢的问题。。。这是一个非常容易犯的逻辑错误,也是
k=“z”代码>
如果(!k==“x”| |!k==“y”)
{
//做点什么
}
二,
在我看来,这两种说法都应该做点什么。。。。只有最下面的一个会被击中。顺便说一句,这是预期的结果
再一次抱歉,但是我不能把我无知的头脑绕到这一点上。这是因为您不理解逻辑表达式求值。进一步阅读请参见维基百科页面,但您需要的要点是这一点
!(A | | B)
与相同!A&&!B
这不是一个愚蠢的问题。。。这是一个非常容易犯的逻辑错误,也是相当常见的错误
为完整起见,我还应添加以下内容
!A | | |!B
与相同!(A和B)
你的问题是“为什么(不是X)或(不是Y)
与不是(X或Y)
不同?”
NOT(X或Y)
如果X或Y为true,则为false,否则为true
(不是X)或(不是Y)
如果X和Y都为true,则为false,否则为true
“X或Y都是真的”和“X和Y都是真的”是不同的
当您感到困惑时,这里有一个很好的技巧:绘制真值表:
X Y NOT X NOT Y X OR Y (NOT X) OR (NOT Y) NOT(X OR Y)
T T F F T F F
T F F T T T F
F T T F T T F
F F T T F T T
现在很清楚他们是不同的了吗
如果现在为非(X和Y)
绘制真值表,您将看到它与(非X)或(非Y)
相同,因此这两个表达式是等效的
如果你为(不是X)和(不是Y)
绘制真值表,你会发现它与不是(X或Y)
是一样的。同样,这两个表达式是等价的
一定要弄清楚
现在,这里有一个更大的问题:
k != "x" || k != "y"
这个谓词只能是true。假设k是“x”。那么它显然不是“y”,所以谓词是真的。假设k是“y”。那么它显然不是“x”,所以谓词是真的。假设k是任何其他值。那么它显然既不是“x”也不是“y”,所以谓词是真的。因此,不管怎样,这都是虚无的事实(不是X)或(不是Y)
并不意味着“既不是X也不是Y”。区别在于第二个示例是编译的,而第一个示例不是…是的,很抱歉,这是一个糟糕的示例,但是在我这边,我正在检查k是否包含(“”),在这种情况下,您不想使用=!==。。。让问题清晰无误是你的责任,而不是我们的责任。因为不是A也不是B
!=<代码>不是(A或B)
为什么不编辑您的问题以包括您实际在做什么。我们都知道包含什么
功能。
k != "x" || k != "y"