C# 如果语句的工作方式与预期不同

C# 如果语句的工作方式与预期不同,c#,C#,这可能是一个愚蠢的问题,也可能不是,但为什么下面两个if语句的结果会不同呢 让我们说k=“z” 如果(!k==“x”| |!k==“y”) { //做点什么 } 二, 在我看来,这两种说法都应该做点什么。。。。只有最下面的一个会被击中。顺便说一句,这是预期的结果 再一次抱歉,但是我不能把我无知的头脑绕到这一点上。这是因为您不理解逻辑表达式求值。进一步阅读请参见维基百科页面,但您需要的要点是这一点 !(A | | B)与相同!A&&!B 这不是一个愚蠢的问题。。。这是一个非常容易犯的逻辑错误,也是

这可能是一个愚蠢的问题,也可能不是,但为什么下面两个if语句的结果会不同呢

让我们说
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"