复合运算
如果想为一个变量赋值,然后值是自己对别人进行某种计算,那么可以简写。
把表达式中的自己丢掉,把运算符放在等于号的左边:
int a = 10;
a += 15;
//等同于 a = a + 15;
double d = 5;
d *= a;
//等同于 d = d * a;
bool b = true;
b &= false;
//等同于 b = b & false;
Console.WriteLine(a <<= 2);
//等同于 Console.WriteLine(a = a << 2);
逻辑与,逻辑或,逻辑非不能组成复合运算
赋值表达式的值
对于普通赋值表达式而言,会返回右侧的值。
(在某些特殊的情况下,执行a=b后,a的结果不一定是b)
int a, b, c, d;
//例如连续赋值语句:
a = b = c = d = 10;
//可以理解为
a = (b = (c = (d = 10)));
//或是
d = 10;
c = 10;
b = 10;
a = 10;
//无论此期间bcd发生了怎样的变化,对a来说只是把10赋值给他。
对于符合赋值表达式而言,结果为完成计算以后的自己
int a, b, c, d;
a = b = c = d = 10;
a += b += c += d += 10;
Console.WriteLine(a);//50
Console.WriteLine(b);//40
Console.WriteLine(c);//30
Console.WriteLine(d);//20
自增,自减
数值类型在加1或减1时可以简写。在变量的前面或后面连写两个++或 – – 。
int a = 0;
a++;
如果符号写在前面,那么这个表达式返回的结果就是完成运算后的值
如果符号写在后面,那么返回的是计算之前的值。
三目运算(三元运算)
三目运算是一个取值表达式,格式为:条件+问号+满足时的值+冒号+不满足时的值。
三目运算也是短路运算。只会计算和运行需要的那边的值。
int a = 3, b = 3;
Console.WriteLine(true ? ++a : ++b);
Console.WriteLine($"a={a},b={b}");//a=4,b=3。b++没有被运行
a = 3;
b = 3;
Console.WriteLine(false ? --a : --b);
Console.WriteLine($"a={a},b={b}");//a=3,b=2
三目运算不是操作语句,不能独立成句。
三目运算符是值表达式,待返回的两个值需要能转化为同一类型。并且是能取值的语句。
三目表达式中有一个冒号,如果在内插字符串中使用需要打个括号,否则会视为格式说明符。
三目运算符可以嵌套使用,但哪怕加了括号,都很难看懂
var v3 = true ? true ? true ? 1 : 2 : 3 : 4;
//等同于
v3 = true ? (true ? (true ? 1 : 2) : 3) : 4;
var v4 = true ? true ? 1 : 2 : true ? 3 : 4;
//等同于
v4 = true ? (true ? 1 : 2) : (true ? 3 : 4);
舍弃表达式
使用舍弃符_可以和能取值的语句凑成句子
不过,下划线是有效的标识符。如果你已经使用了下滑作为变量名,那么这个功能无法使用。