关系运算符
两个数据之间的关系运算
下表显示了 C# 支持的所有关系运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 不为真。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (A > B) 不为真。 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (A < B) 为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (A >= B) 不为真。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | (A <= B) 为真。 |
1.1注意
-
和属性赋值一样,需要处理关系的这两个数据之间必须保持类型最终一致
-
关系运算符运算的最终结果值只有两个:true、false
赋值运算符
2.1什么是赋值运算符
在给等号左边数据赋值的时候,先考虑是否要进行运算赋值
2.2常见赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | C = A + B 将把 A + B 的值赋给 C |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操 作数 | C += A 相当于 C = C + A |
-= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操 作数 | C -= A 相当于 C = C - A |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操 作数 | C *= A 相当于 C = C * A |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操 作数 | C /= A 相当于 C = C / A |
%= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | C %= A 相当于 C = C % A |
<<= | 左移且赋值运算符 | C <<= 2 等同于 C = C << 2 |
---|---|---|
>>= | 右移且赋值运算符 | C >>= 2 等同于 C = C >> 2 |
&= | 按位与且赋值运算符 | C &= 2 等同于 C = C & 2 |
|= | 按位或且赋值运算符 | C|= 2 等同于 C = C|2 |
^= | C &= 2 等同于 C = C & 2 | 2C ^= 2 等同于 C = C ^ 2 |
杂项运算符
3.1常用杂项运算符
-
sizeof()返回数据类型(值类型)的大小(求指定值类型所占内存大小,以字节为单位)。sizeof(int),将返回4
-
typeof()返回class的类型。typeof(StreamReader); 在之后学习反射
-
三元运算符:?x:y 条件表达式,如果条件为真?则为x:否则为y
-
is判断对象是否为某一类型
-
as-if(ford is car);// 检查ford是否是car类的一个对象。
-
as强制转换,即使转换失败也不会抛出异常。
3.2三元运算符
Exp1 ? Exp2 : Exp3;
条件运算符 ? :,可以用来替代 if...else语句。它的一般形式如下:
其中,Exp1、Exp2 和 Exp3 是表达式。请注意,冒号的使用和位置。? 表达式的值是由 Exp1 决定的。如果 Exp1 为真,则计算 Exp2 的值,结果即为整个 ? 表达式的值。如果 Exp1 为假,则计算 Exp3 的值,结果即为整个 ? 表达式的值。
3.3 as类型转换
作用基本上和类型前带括号转换方式作用是一样,都是将数据转成目标类型,但是as即使转换不成功,也不会直接抛异常,而使用前缀括号转换不成功直接报错。
事件的参数
4.1 sender参数
所有事件的sender参数的类型是一样的:object
sender参数代表事件的发起者对象,这个事件是由哪个对象生成的,那么通过这个sender参数获取到这个对象
4.2 e参数
e参数是事件的触发者对象,这个事件是由哪个对象触发的,则e就是谁,例如所有的鼠标事件,e就是鼠标对象
运算符优先级
类别 | 运算符 | 结合性 |
---|---|---|
后缀 | () [] . ++ -- | 从左到右 |
一元 | + - ! ~ ++ -- (type) & sizeof | 从右到左 |
乘除 | * / | 从左到右 |
加减 | + | 从左到右 |
移位 | << >> | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | == != | 从左到右 |
位与 AND | & | 从左到右 |
位异或 | ^ | 从左到右 |
位或 OR | | | 从左到右 |
逻辑与 AND | && | 从左到右 |
逻辑或 OR | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %=>>= <<= &= ^= |= | 从右到左 |
逗号 | , | 从左到右 |
逻辑控制语句
6.1逻辑控制
控制计算机阅读代码的一个顺序逻辑,作用提高算法的执行效率
6.2条件判断语句
判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)
6.2.1判断语句
-
if语句( 一个if语句由一个布尔表达式后跟一个或多个语句组成。)
-
if...else...语句(一个if语句后可跟一个可选的else语句,else语句在布尔表达式为假时执行。)
-
当使用 if...else if...else... 语句时,以下几点需要注意
-
一个 if 后可跟零个或一个else,它必须在任何一个 else if 之后。
-
一个 if 后可跟零个或多个 else if,它们必须在 else 之前。
-
一旦某个else if匹配成功,其他的else if或else将不会被测试。
-
-
嵌套if语句(可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。
例子:
针对if...if...if.../if...else if...else.../if...else if...else if...的结果区别
-
三个if的结果有八种
-
if...else if...else...结果有三种
-
if...else if...else if...结果有四种
-
-
switch语句(一个 switch 语句允许测试一个变量等于多个值时的情况。)
switch(expression){ case constant-expression : statement(s); break; case constant-expression : statement(s); break; /* 您可以有任意数量的 case 语句 */ default : /* 可选的 */ statement(s); break; }
switch 语句必须遵循下面的规则 :
-
switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个class类型,其中class有一个单一的转换函数将其转换为整型或枚举类型。
-
在一个switch中可以有任意数量的case语句。每个case后跟一个要比较的值和一个冒号。
-
case的constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量
-
当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止
-
当遇到break语句时,switch终止,控制流将跳转到switch语句后的下一行。
-
不是每一个case都需要包含break。如果case语句为空,则可以不包含 break,控制流将会继续后续的case,直到遇到 break 为止。
-
C#不允许从一个开关部分继续执行到下一个开关部分。如果 case 语句中有处理语句,则必须包含 break 或其他跳转语句。
-
一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。
-
C# 不支持从一个case标签显式贯穿到另一个case标签。如果要使C#支持从一个case标签显式贯穿到另一个case 标签,可以使用 go to 一个 switch-case 或 goto default。
-
循环控制语句
7.1 for循环
一个 for 循环是一个允许编写一个执行特定次数的循环的重复控制结构。
for (init; condition; increment ) { statement(s); }
下面是 for 循环的控制流:
init:循环变量初始化,可有可无
condition:循环条件,在循环条件存在时,务必保证在第一个分号之前声明init,这个初始化位置不一定在for小括号中,可有可无
-
当循环条件为真,则会执行statement(s)循环体
-
当循环条件为假,则循环结束
increment:循环变量自变,当每次循环体执行完一次必然会执行自变,可有可无
三者缺少任意一个这个循环语句变成死循环
7.2 foreach遍历循环
使用foreach可以迭代数组或者一个集合对象,遍历一个集合中的每一项,遍历到一项循环一次
foreach(var temp in arrayOfIntts) { 循环体 }
7.3 while循环和do...while循环
只要给定的条件为真,C#中的 while 循环语句会重复执行一个目标语句
while(condition) { statement(s); }
在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。condition 可以是任意的表达式,当为任意非零值时都为真。当条件为真时执行循环。
当条件为假时,程序流将继续执行紧接着循环的下一条语句
而do...while循环
在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。condition 可以是任意的表达式,当为任意非零值时都为真。当条件为真时执行循环。
当条件为假时,程序流将继续执行紧接着循环的下一条语句
do { statement(s); }while( condition );
条件表达式出现在循环的尾部,所以循环中的 statement(s) 会在条件被测试之前至少执行一次。
如果条件为真,控制流会跳转回上面的 do,然后重新执行循环中的 statement(s)。这个过程会不断重复,直到给定条件变为假为止
7.4 控制语句
7.4.1 break
break控制循环语句跳出当前循环
7.4.2 return
return控制程序代码直接跳出从他往后的所有代码直到本次条件结束
7.4.3 continue
continue控制程序跳出本次循环进入下一次循环