if语句,布尔值

时间:2011-05-16 23:22:39

标签: c#

此方法取自Murach的C#2010书籍,并作为检查字符串是否包含小数值的方法示例:

        // the new IsDecimal method
    public bool IsDecimal(TextBox textBox, string name)
    {
        //make sure the string only contains numbers and numeric formatting
        string s = textBox.Text;
        int decimalCount = 0;
        bool validDecimal = true;
        foreach (char c in s)
        {
            if (!(
                c == '0' || c == '1' || c == '2' ||   // numeric chars
                c == '3' || c == '4' || c == '5' ||
                c == '6' || c == '7' || c == '8' ||
                c == '9' || c == '.' ||
                c == '$' || c == '%' || c == ',' ||  // formatting chars
                c == ' '
                ))
            {
                validDecimal = false;
                break;
            }
            if (c == '.')
            {
                decimalCount++;
            }
        } // end loop

        if (validDecimal && decimalCount <= 1)
        {
            return true;
        }
        else
        {
            MessageBox.Show(name + " must be a decimal number.",
                "Entry Error");
            textBox.Focus();
            return false;
        }
    }

我的问题是关于if语句和布尔值:

            if (validDecimal && decimalCount <= 1)
        {
            return true;
        }

我知道它应该检查两个validDecimal是否从上面的循环返回true并且只有一个小数点存在。我对此很困惑,我对bool的理解是它可以包含两个值:1 = true,0 = false;在这两种情况下,if语句都会得到满足(0小于1且1相等)。我认为正确的if语句看起来像那样:if(validDecimal == true&amp;&amp; decimalCount&lt; = 1)但是因为我是初学者我不确定,这不在勘误表中这本书。

5 个答案:

答案 0 :(得分:6)

bool值本身与value == true

相同

如果你有

bool trueThing = true;

然后以下都是等价的(和真实的)

trueThing;
trueThing == true;
(trueThing == true) == true;
((trueThing == true) == true) == true;

等等。最简单,最简洁的形式是第一种:trueThing。它不是0或1,它是真是假。

答案 1 :(得分:3)

运营商优先权。这样:

if (validDecimal && decimalCount <= 1)

被解释为:

if (validDecimal &&  (decimalCount <= 1))

if ((validDecimal && decimalCount) <= 1)

换句话说,<=发生在&&之前。

答案 2 :(得分:1)

我认为你正在阅读这个陈述是错误的,如果你放了括号,那么显而易见的是,它看起来像是

(validDecimal) && (decimalCount <= 1)

(validDecimal && decimalCount) <= 1

英文:请检查validDecimaltruedecimalCount最多是1.与true的比较是隐含的,因为没有必要。

在C#中,bool类型的变量可以包含两个值truefalse中的一个,但它们不会作为数字,因此您不能说它们是1和0(尽管它们通常以这种方式实现)。

此外,在大多数语言中,如果您的意思是“ab最多都是x”,则不能将其写为a && b <= x。这不是(大多数)计算机语言的工作方式。

答案 3 :(得分:0)

你可以写

if (validDecimal == true && decimalCount <= 1)

但它等同于简写方式

if (validDecimal && decimalCount <= 1)

当类型是bool时无需再次使用

  

== true

假设

答案 4 :(得分:0)

我真的不知道在c#中,但在Java中,你甚至可以这样做:

boolean b = 1<2;

1<2为真(请记住,这是一个布尔方程式),因此赋给b的值为true。你在if中放入的所有内容都被解释为

if(whateverLogicEquationHereIsTrue){do this}
else{means that the boolean input to the if, has come to be false}

现在,这是什么输出?

if(!(1>2)){print "a"}
else{print "b"}

提示:!是逻辑运算符NOT