zoukankan      html  css  js  c++  java
  • 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的优化

      

  • 相关阅读:
    分页工具类
    ajax乱码的问题
    ibatis配置文件中的XML解析错误The content of elements must consist of well-formed character data or markup.
    nginx 反向代理导致的session丢失的问题
    后台返回的值ajax接收不到
    C/C++中vector与list的区别
    C/C++中内存泄漏、内存溢出与野指针的解释与说明
    C++中深拷贝与浅拷贝
    C++中的构造函数与析构函数及组合类的调用
    Linux中request_irq()中断申请与处理说明
  • 原文地址:https://www.cnblogs.com/Codemandyk/p/10980009.html
Copyright © 2011-2022 走看看