第四章 流程控制
本章内容:
● 布尔逻辑的含义及其用法
● 如何控制代码的分支
● 如何编写循环代码
本章介绍控制程序流的两种方法。程序流程就是C#代码的执行顺序。这两种方法就是分支和循环。分支是有条件地执行代码。条件取决于计算的结果,例如,“只有myVal小于10,才执行这行代码”。 循环重复执行相同的语句(重复执行一定的次数,或者在满足测试条件后停止执行)。
这两种方法都要用到布尔逻辑。
4.1 布尔逻辑
bool类型可以有两个值:true或false。这种类型常常用于记录某些操作的结果,以便操作这些结果。bool类型可用于存储比较结果。
布尔比较需要使用布尔比较运算符(也称为关系运算符),如表4-1所示。这里var1都是bool类型的变量,var2和var3则可以是不同类型。
note: 一个常见的代码错误是,无意间假定由于val1 < val2是false,所以val1 > val2为true。如果val1 == val2,则这两个语句都是false。
在处理布尔值时,还有其他一些布尔运算符,如表4-2所示。
&和 | 运算符也有两个类似的运算符,称为条件布尔运算符(见表4-3)。
这些运算符的结果与&和 | 完全相同,但得到结果的方式有一个重要区别:其性能比较好。两者都是检查第一个操作数的值(表4-3中的var2),再根据该操作数的值进行操作,可能根本就不处理第二个操作数(表4-3中的var3)。
如果&&运算符的第一个操作数是false,就不需要考虑第二个操作数的值了,因为无论第二个操作数的值是什么,其结果都是false。同样,如果第一个操作数是true,|| 运算符就返回true后,无需考虑第二个操作数的值。但上面的&和 | 运算符却不是这样。它们总是要计算两个操作数。
因为操作数的计算是有条件的,如果使用&&和 || 运算符来代替&和 |,性能会有一定提高。在大量使用这些运算符的应用程序中这表现得尤为明显。作为一个舰则,尽可能使用&&和 || 运算符。
这些运算符有时用于比较复杂的情形,例如,只有第一个操作数包含某个值时,才计算第二个操作数:
var1 = (var2 != 0) && (var3 / var2 > 2);
如果var2是0,则var3除以var2就会导致“除0错误”,或者把var1定义为无穷大(对于某些类型如float来说,可能出现后一种情形,也是可以检测到的)。
4.1.1 布尔赋值运算符
使用布尔赋值运算符可以把布尔比校与赋值组合起来,其方式与第3章中的数学赋值运算符(+=,*=等)相同。布尔值如表4-4所示。
这些运算符处理布尔值和数值的方式与&、|和^相同。
note: &=和!=赋值运算符并不使用&&和 || 条件布尔运算符,即无论赋值运算符左边的值是什么,都处理所有的操作。
在下面的示例中,用户键入一个整数,然后代码使用该整数执行各种布尔运算。代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Ch04Ex01 { class Program { static void Main(string[] args) { Console.WriteLine("Enter an integer:"); int myInt = Convert.ToInt32(Console.ReadLine()); bool isLessThan10 = myInt < 10; bool isBetween0And5 = (0 <= myInt) && (myInt <= 5); Console.WriteLine("Inteeger less than 10? {0}", isLessThan10); Console.WriteLine("Integer between 0 and 5? {0}", isBetween0And5); Console.WriteLine("Exactly one of the above is true? {0}", isLessThan10 ^ isBetween0And5); Console.ReadKey(); } } }
运行结果如下:
使用Convert.ToInt32()从字符串输入中得到一个整数。