永不言弃!
不忘初心:感恩的心!上进的心!

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);

 

 

运行结果

 

 

posted on 2022-02-28 13:58  永不言弃!  阅读(146)  评论(0编辑  收藏  举报