如果陈述和&&或||

时间:2015-11-19 21:02:53

标签: c# if-statement logical-operators

好的,所以我是C#的初学者,我无法理解下面的if语句。

对于此示例,INumber声明为8,dPrice为0,dTAX为10.

        if (iNumber != 8 || iNumber != 9)
        {
            dPrice = dPrice + dTAX;
        }

有人可以解释为什么它会进入声明并将dTAX中的10添加到dPrice中吗?

我知道将它更改为&&有效,但为什么?

根据我的理解,它应该只输入If语句,如果iNumber不等于8或9,它就在这里,所以它不应该进入。

这是我在通过||运行后的输出if statement。

        Inumber is: 8

        dPrice was: 0
        dPrice is now: 10

        dTAX is: 10

有人可以向我解释一下吗?

12 个答案:

答案 0 :(得分:4)

它正在输入语句,因为该语句在计算iNumber!= 9

时变为true

一个||如果任何陈述为真,则if中的(或运算符)为真。

以这种方式思考..

8 != 8 is False
8 != 9 is True

if ( False || True )
{
    //Do Stuff
}

答案 1 :(得分:3)

此代码中的if条件始终评估为true

if (iNumber != 8 || iNumber != 9)

iNumber8时,它不等于9,因此第二部分为true。当iNumber9时,它不等于8,因此第一部分为true。其他任何事情,双方都是true||条件导致true,任何一方都是true。永远不可能false。您希望此处&&代替||

if (iNumber != 8 && iNumber != 9)

或者您可以使用DeMorgan's Law并获取此信息:

if (! (iNumber == 8 || iNumber == 9))

答案 2 :(得分:1)

它应该只输入If语句,如果iNumber不等于8或者如果iNumber不等于9.它不等于9,所以它将进入

答案 3 :(得分:1)

逻辑AND(&&)

  

如果两个操作数均为true,则逻辑AND运算符(&&)返回布尔值true,否则返回false。在评估之前,操作数被隐式转换为bool类型,结果是bool类型。逻辑AND具有从左到右的关联性。

逻辑OR(||)

  

如果其中一个或两个操作数为true,则逻辑OR运算符(||)返回布尔值true,否则返回false。在评估之前,操作数被隐式转换为bool类型,结果是bool类型。逻辑OR具有从左到右的关联性。

所以如果你有:

bool someVariable = true;
bool someOtherVariable = false;

if ((someVariable == true) && (someOtherVaribale == true))
{
    //This code will be executed
}

if ((someVaribale == true) || (someOtherVariable == true))
{
    //This code will be executed
}

答案 4 :(得分:1)

该陈述在逻辑上等同于

    if (!(iNumber == 8 && iNumber == 9))
    {
        dPrice = dPrice + dTAX;
    }

总是为真,因为数字不能同时为8和9。

你想:

    if (iNumber != 8 && iNumber != 9)
    {
        dPrice = dPrice + dTAX;
    }

    if (!(iNumber == 8 || iNumber == 9))
    {
        dPrice = dPrice + dTAX;
    }

以逻辑的方式对你更有意义。

答案 5 :(得分:0)

您正在使用||Logical OR),如果任何操作数为true,则评估为true。因此,您的第一个条件(iNumber != 8)为false,但第二个条件(iNumber != 9)为true,因此整体结果为true。

它与&&一起使用的原因是AND运算符要求两个操作数都为true,以求为true。如果其中一个操作数为false,则整体结果为false。

您应该看到:Truth Tables, Logic, and DeMorgan's Laws

答案 6 :(得分:0)

|| OR运算符表示只有一个OR或另一个必须为真。在这种情况下,iNumber!= 9,因此代码的一部分为真并且它进入语句。我想你会想要使用&& amp; AND运算符表示它不能为8并且它不能为9.

答案 7 :(得分:0)

在英语中,其内容如下:如果iNumber不是8或iNumber不是9。 iNumber是8,它不是9(你的第二次检查),所以它落入if块。

你正在描述一个AND条件,它不等于8,它不等于9。

答案 8 :(得分:0)

  

如果iNumber不等于8或者,它应该只输入If语句   9

那将是:

if (!(iNumber == 8 || iNumber == 9))
...

答案 9 :(得分:0)

使用

if (iNumber != 8 && iNumber != 9)

这意味着"如果iNumber不等于8且iNumber不等于9"。你的陈述:

if (!Number != 8 || iNumber != 9)

表示"如果!iNumber不等于8或iNumber不等于9"只要iNumber不等于其中一个值,并且因为它只能同时保存一个值而不是两个值,这是正确的,这个语句将永远为真。

答案 10 :(得分:0)

以下内容来自MSDN

  

条件OR运算符(||)执行其bool的逻辑或运算   操作数。如果第一个操作数的计算结果为true,则为第二个操作数   没有评估。如果第一个操作数的计算结果为false,则第二个操作数   operator确定OR表达式是否作为整体求值   是真还是假。

在您的示例中,第一个条件(!= 8)为false,因为iNumber = 8,但第二个条件是(!= 9),这是真的。这就是它进入大括号的原因。

相反,如果你说!= 8&& != 9,它不会进入括号,因为它不满足这两个条件。

答案 11 :(得分:-1)

维护大型网站的菜单既困难又耗时。

在ASP.NET中,菜单可以存储在文件中,以使其易于维护。该文件通常称为web.sitemap,并存储在Web的根目录中。

此外,ASP.NET具有三个新的导航控件:

动态菜单 树视图 站点地图路径