? 和 ??的使用

1、? 的使用

 

第一种:可空类型修饰符(?),即定义数据类型可为空

目的是用于对int,double,bool等无法直接赋值为null的类型进行null的赋值

    int i;                      //--> default value is 0
    int? valueOfNull;           //--> default value is null    

说明

  引用类型可以使用空引用,表示一个不存在的值,而值类型通常不能表示为空。 ​

  例如:

    string str = null;   是正确的,

    int i = null;     编译器就会报错。 ​

   为了使值类型也可为空,就可以使用可空类型,即用可空类型修饰符"?"来表示,表现形式为"T?" ​

  例如:

    int?       表示可空的整型,

    DateTime?    表示可为空的时间。 ​

  T?  其实是System.Nullable(泛型结构)的缩写形式,也就意味着当你用到T?时,编译器编译 时会把T?编译成 System.Nullable的形式。

  ​ 例如:int?  编译后便是System.Nullable的形式。

 

 

第二种:用于判断对象是否为null

? 用于判断对象是否为 null 时,

如果对象为null,则不管调用什么都不会抛出异常,直接返回null ;

如果对象不为null,则返回 ? 右边的值;

    Pen redPen = new Pen();
     redPen.showColor();
     
     Pen nullPen = null;
     nullPen?.showColor();             // 这里将不会引起异常
     
     Pen testNullPen = null;
     testNullPen.showColor();         // 这里将会抛出异常

 

 

 

 

2、?? 的使用

空合并运算符(??)

用于定义可空类型和引用类型的默认值。

?? 如果此运算符的左操作数不为null,则此运算符将返回左操作数,否则返回右操作数。

 

例如:

  a ?? b   当 a 为 null 时则返回 b,a 不为 null 时则返回 a 本身。

 

​ 空合并运算符为右结合运算符,即操作时从右向左进行组合的。

例如:

  “ a ?? b ?? c ” 的形式按 “a ?? (b ?? c)” 计算。

 

  string name = null;
   name = name ?? "Alex";   // --> if name is null, return Alex ; so name = "Alex"

 

 

   //“ a ?? b ?? c ” 的形式按 “ a ?? (b ?? c) ” 计算。
    string aa = null, bb = "bb", cc = null, ff = "ff";
    string dd = aa ?? bb ?? cc;        //bb
    string ee = bb ?? aa ?? cc;        //bb
    string gg = bb ?? cc ?? ff;        //bb
    Console.WriteLine("dd={0}", dd);
    Console.WriteLine("ee={0}", ee);
    Console.WriteLine("gg={0}", gg);

 

 

运行结果

? 和 ??的使用

 

 

上一篇:mybatis动态sql中的trim标签的使用


下一篇:CAD填充比例调整