奇奇怪怪的运算符和表达式
我是看我师傅的项目中他用了一些奇奇怪怪的问号,我脑袋上也有了很多奇奇怪怪的问号。于是这篇博客就出来了。
首先c#版本需要是c# 8.0以上或者.NET Core 3.x
微软的版本控制文档>>>>版本控制
微软关于运算符的文档>>>>关于运算符和表达式的文档
配置&准备工作
目前是使用是VS2019,创建的是 .NET Core程序,版本是Core 3.1,至少是Core3.1才可以使用c# 8.0的语法,.NET Framework 的C# 语言版本的默认值 是c# 7.3 。
暂时不知道如何升级c# 语言版本
创建一个 .NET Core 控制台程序就行了。然后在 项目§>> 项目属性,看一下目标框架是不是符合的。
? 的名字是:可为空的值类型
文档>>? 的文档
单 一个问号表示可空类型,
比如:你要给 int 一个空值,是会报错的,但是在int后面加上?就成了可空类型,他就可以为空。
他是会报错的
就像上面这样,然是在后面加一个 ? 就不会报错了
但是这里需要注意,A的类型已经不是int 类型了,他成了 int?
然后多写几行看一下
A是空的哦。
?? 的名字是:合并运算符
文档>>?? 的文档
解释不清楚,看代码
解释一下,在25行,如果a不为空则c=a,否则c=b
测试一下a不为空
a不为空,那么c=a,打印出a的值
然后如果是if-else
会不会好理解一些?
??= 的名字是:空合并赋值运算符
文档>> ??= 的文档
?? 和 ??=的文档在一个网页上
代码如图
如果a为空那么c=b,否则c=a,我的理解是这样,感觉很 ?? 一样。
?. 的名字是:条件运算符
文档>>?. 的文档
在中间,可以通过目录找到他
?. 仅当操作数为非 null 时才用于执行成员或元素访问运算
代码如图
当a为空的时候并没有在第49行抛出a是空引用的异常,然后在第52行给a值之后,在53行将a换成了string然后打印了出来。
?[] 的名字是:null 条件运算符
文档>>?[]的文档
看了文档很久,也试了几下但是我是真菜。
- null条件运算符
?:的名字是:条件运算符
文档>>?: 文档
如果满足?左边的表达式,则返回冒号左边的值,否则返回冒号右边的值。
::的名字是:命名空间别名限定符
文档>>:: 的文档
再次不会
- 命名空间别名限定符
=>的含义是:作为lambda运算符;作为成员名称的分隔符和表达式主体定义中的成员实现。
文档>>=> 的文档
拉姆达表达式的文档>>拉姆达表达式
表达式主体定义>>表达式主体定义
这个有两种形式,我一般使用的是lambda表达式。
有参数的表达式 和 没有参数的表达式两种。
lambda表达式的核心是委托,所以在使用之前要有一个委托(delegate)。
有参数的表达式
TODO:有参数的拉姆达表达式
没有参数的表达式
TODO:无参的拉姆达表达式
位运算符
>>的名字是:右移运算符
//byte e = 0b_0100;//十进制的2
//var g = f >> 3;
//Console.WriteLine($"Shifted byte右移运算符:{ Convert.ToString(g, toBase: 10)}");
<<的名字是:左移运算符
| 的名字是:位或运算符
^异或运算符
二级制最高位为1的时候为负数