C#中Null类型

  1:可空值类型

  可空值类型是System.Nullable<T>这个struct的类型

  可空值类型除了可以正确的表示其底层数据类型(也就是T)的范围,还可以表示null

  1.1:如下,bool值类型可以为True和False,但不能为Null

        Nullable<bool>除了可以为True和False外,还可以为Null

  

  1.2:Nullable写起来太麻烦,这里有简便写法,只需要在类型后面加个?即可,如下

 

2:Null,空,空白string

            string name = "张三"; //正常字符串,有值非空

            string name1 = null;  //值为null

            string name2 = "";    //是个空字符串

            string name3 = "    ";//空白字符串,双引号之间是空格或者Tab键

  2.1:如何判断Null,空,空白string

    2.1.1:判断Null

string name = null; 

if (name == null)
{
    //...
}

    2.1.2:判断空,双引号之间啥也没有那种,下面的这个方法同样也包含了字符串为Null的这种情况

string name2  = ""; 

if (string.IsNullOrEmpty(name2))
{
    //...
}

    2.1.3:判断空白字符串,也可能是空字符串,也可能是Null字符串,就用下面这个

string name3 = "    ";

if (string.IsNullOrWhiteSpace(name3))
{
    //...
}

3:Nullable<T>的常用属性和方法

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

    

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

    

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

    

  .GetValueOrDefault(默认值)//底层值类型的值或指定的默认值,意思就是可以指定默认值,不为Null就返回底层值类型;如果为Null就返回默认值

    

 4:Nullable<T>转换

  T ---> Nullable<T> 隐式转换,因为后面的比前面的值的范围大,多了一个Null值

  如下图:从范围小的a转换成范围大的b就直接隐式转换,前提这个范围大的要包含范围小的类型才可以

  

  Nullable<T> ---> T ,反而言之,就得显示转换,如图一错二对:

     

  如果值为Null,就会报异常,如图:

  

5:检查Null的操作符

  条件操作符(三元运算符)?:  

  

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

    

  Null条件操作符 ?.  

  

  Null条件操作符还有  ?[   针对索引表示法的Null条件操作符

   

 6:string str = null,string str1 = “”,string str2 = string.empty;的区别

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

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

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

 

 

 

  

 

posted @ 2019-06-09 10:27  大北票  阅读(6918)  评论(0编辑  收藏  举报