C# 10核心技术指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.5 布尔类型和运算符

C#中的bool(System.Boolean类型的别名)类型是能赋值为true和false字面量的逻辑值。

尽管布尔类型的值仅需要1位的存储空间,但是运行时却使用了1字节内存空间。这是因为字节是运行时和处理器能够有效使用的最小单位。为避免在使用数组时的空间浪费,.NET在System.Collections命令空间下提供了BitArray类,其中每一个布尔值仅占用一位。

2.5.1 布尔类型转换

bool类型不能转换为数值类型,反之亦然。

2.5.2 相等和比较运算符

==和!=用于判断任意类型的相等与不等,并总是返回一个bool值[3]。值类型通常有很简单的相等定义:

对于引用类型,默认情况下相等是基于引用的,而不是基于底层对象的实际值(更多内容请参见第6章):

相等和比较运算符==、!=、<、>、>=和<=可用于所有的数值类型,但是用于实数时要特别注意(请参见2.4.9节)。比较运算符也可以用于枚举(enum)类型的成员,它比较的是表示枚举成员的整数值,我们将在3.7节中介绍。

我们将在4.17节、6.13节和6.14节中详细介绍相等和比较运算符。

2.5.3 条件运算符

&&和||运算符用于判断“与”和“或”条件。它们常常与代表“非”的!运算符一起使用。在下面的例子中,UseUmbrella方法在下雨或阳光充足(雨伞可以保护我们不会经受日晒雨淋),以及无风(因为雨伞在有风的时候不起作用)的时候返回true:

&&和||运算符会在可能的情况下执行短路计算。在上面的例子中,如果刮风,(rainy || sunny)将不会计算。短路计算在某些表达式中是非常必要的,它可以允许如下表达式运行而不会抛出NullReferenceException异常:

&和|运算符也可用于判断“与”和“或”条件:

不同之处是&和|运算符不支持短路计算。因此,它们很少用于替代条件运算符。

与C和C++中的&和|运算符不同,C#的&和|运算符在用于布尔表达式时执行布尔比较(非短路计算),仅在作用于数值时才执行位运算。

(三元)条件运算符

三元条件运算符(由于它是唯一一个使用三个操作数的运算符,因此也简称为三元运算符)使用q ? a : b的形式。因此,它在q为真时计算a,否则计算b:

条件运算符在语言集成查询(Language-Integrated Query,LINQ)语句中的用处很大(参见第8章)。