本文是B站up主 十月的寒流 的相应视频的学习笔记,可以直接访问该视频获取更详细的讲解:
C#中问号(?)运算符的历代新增用法
C# 1.0 三目运算符
string res = x >5 ? "goood" : "no"
C# 2.0 可为空的值类型(Nullable Value Types)
int? x = null;
上述代码本质上是Nullable<int> x = null
int? y = default
即该int?类型的默认值不再是int类型的默认值0,而是null
int? 还是值类型,不是引用类型
C# 6.0 Null Propagator(空引用传递)
短路机制
1.对于属性的访问,遇到第一个null就直接返回null:
string childName = p?.Child?.Name;
2.对于方法的调用,遇到第一个null就停止:
p?.Child?.SayHello();
3.?[]:
var firstLetter = p?.Name?[0];
//实际上firstLetter就是一个char?
PropertyChanged?.Invoke();
//在调用事件的时候,可以不用关注事件是否是null
C# 8.0 Null-Coalescing ?? (空合并)
message = message ?? GetMessage();
//如果??左边为null则返回右边的值
可以升级简化为:message ??= GetMessage();
C# 8.0 Nullable Reference Type 可为空的引用类型
string?
//C#中string是引用类型
C# 8.0 Null-Forgiving Operator(空包容)
var box = this.FindName("box") as TextBox;
box!.Text = "Hello";
表面我确定这个box一定能找到,一定不为空