C Sharp/空值

string str = null;在栈上有地址,但在堆上没有空间;null是string的默认值

string str1 ="":空字符串,在栈和堆都有地址,并且堆上地址为空

string str2 = string.empty;它和str1差不多,在堆栈都为空间,不同就是在语法级上对str1的优化

可空值类型System.Nullable<T>:可以正确的表示其基础数据类型,还可以表示null。例如,bool值类型可以为True和False,但不能为null。Nullable<bool>除了可以为True和False外,还可以为null。Nullable写起来太麻烦,这里有简便写法,只需要在类型后面加个?即可,如 bool? b1=null;

判断Null,可用if (name == null)。也可用if (string.IsNullOrEmpty(name2))。

Nullable<T>.HasValue //如果值为null,结果就是false; 否则:true  

Nullable<T>.Value //底层值类型的值,如果Nullable<T>的值是Null,就会报异常

Nullable<T>.GetValueOrDefault() //底层值类型的值或该类型的默认值,意思就是如果你的值不为Null,就会把值返回回来;如果是Null,就返回这个值的默认值,int的默认值是0

T ---> Nullable<T>为隐式转换;Nullable<T> ---> T ,就得显示转换,如果值为Null,就会报异常。

Null合并操作符a??b 如果左边a不为Null,返回左边a的值;如果a为Null,返回b的值

Null条件操作符?. 如a?.memberName

Null条件操作符还有  ?[ 针对索引表示法的Null条件操作符。如 arrayName?[1].Trim();