一、?
1、在值类型中添加?,代表没给值类型分配内存空间,如int?a = null
2、在引用对象中添加?,如string a = null,a.append()方法则报空引用异常错误,如果使用a?.append()将不会执行append方法
二、??
使用在引入类型中,如果前者为空,则将后者的对象赋给它
如 var s = null ?? null ?? “2”; 则s为字符串2
三、? :
三目运算符,则使用在必须有返回值中且两者返回结果的类型必须一致,当条件满足时则执行?后面的,或者执行:后面的结果
var s = true ? 1 : 2,结果为1
四、!
当如果你确定引用类型不为空时则使用!.,如 a.Display()比如出现引用波浪线并且出现空引用异常时,可以使用a!.Display()来解决波浪线的问题