【读书笔记】C#高级编程 第七章 运算符和类型强制转换

时间:2021-12-13 03:55:38

算术运算符

 

+ - * / %

 

逻辑运算符

 

& | ^ ~ && || !

 

字符串连接运算符

 

+

 

增量和减量运算符

 

++ --

 

移位运算符

 

<< >>

 

比较运算符

 

== != < > <= >=

 

赋值运算符

 

= += -= *= /= %= &= |= ^= <<= >>=

 

成员访问运算符(用于对象和结构)

 

.

 

索引运算符(用于数组和索引器)

 

[]

 

类型转换运算符

 

()

 

条件运算符(三元运算符)

 

?:

 

委托连接和删除运算符

 

+ -

 

对象创建运算符

 

new

 

类型信息运算符

 

sizeof is typeof as

 

溢出异常控制运算符

 

checked unchecked

 

间接寻址运算符

 

[]

 

名称空间别名限定符

 

::

 

空合并运算符

 

??

 

1、运算符的简化操作

x+=y等同于x=x+y,赋值运算符中(+= -= *= /= %= &= |= ^= <<= >>=)都是相同的模式。

x++和++x单独一行时等同于x=x+1。当他们用于较长的表达式内部时,运算符放在前面(++x)会在计算表达式之前增加x。

int x = 0,y=0; x++; ++y; if (x==y) { Console.WriteLine("单独一行++在前在后结果一样"); } if (++x==2) { Console.WriteLine("++在前提前计算"); } if (y++==2) { Console.WriteLine("++在后没有提前计算"); }

运行以上代码,结果如下:

(1)条件运算符

条件运算符(?:)也称单元运算符,是if...else的简化形式。它判断一个条件真假来返回对应的值(为真返回:之前的值,为假返回:之后的值)。

int x = 0; string str = x == 0 ? "x等于0" : "x不等于0"; Console.WriteLine(str);

运行以上代码,结果如下:

恰当的使用三元运算符,可以使程序非常简洁。

(2)checked运算符和unchecked运算符

C#提供checked运算符和unchecked运算符,来对一个代码块进行标记,是否执行溢出检查。

byte x = 255; x++; Console.WriteLine(x);

运行以上代码,结果如下:

这是因为,,C#默认使用unchecked运算符不对溢出执行检查,这会导致数据丢失(byte不能超过255,溢出的位会丢失,所以结果为0)。

如果要防止溢出导致的数据丢失,可以使用checked运算符对代码块进行标记。

byte x = 255; checked { x++; } Console.WriteLine(x);

运行以上代码,结果如下:

程序会抛出异常,这个时候我们就能捕捉异常,来防止溢出丢失数据。

3is运算符

Is运算符检查对象是否与特定类型兼容(是该类型或者派生自该类型)。