天天看點

C#中的"?"和"??"

參考網址:https://www.cnblogs.com/tylerdonet/p/3274787.html

摘自:http://www.cnblogs.com/zxjyuan/archive/2009/10/27/1590795.html

  如果你看到C#中的“?”問号腦袋裡便充滿問号,那麼這個貼子便是為你而寫的。有人說“細節決定成敗”,細節就意味着繁瑣,像我這樣浮躁的人現在都已經習慣了繁瑣,如果你還不習慣繁瑣的話,那麼就把這個貼子當作一次練習機會吧。

      在C#中“?”有三種用法。

      1、可空類型修飾符(?):引用類型可以使用空引用表示一個不存在的值,而值類型通常不能表示為空,例如:string str=null;是正确的。int i=null;編譯器将報錯。為了使值類型也可為空,可空類型出現了,可空類型使用可空類型修飾符?來表示,表現形式為T?。例:int?表示是可空的整 形,DateTime?表示為可空的時間。T?其實是System.Nullable<T>(泛型結構)的縮寫形式,也就意味着當你用到T? 時編譯器在編譯時會把T?編譯成System.Nullable<T>的形式,例如:int?,編譯後便是 System.Nullable<int>的形式。更多細節待續……。

      2、三元(運算符)表達式(?:):如果這個你也不了解的話,那你就當我也不了解吧,不再贅述。

      3、空合并運算符(??):用于定義可空類型和引用類型的預設值。如果此運算符的左操作數不為 null,則此運算符将傳回左操作數;否則傳回右操作數。 例:a??b,當a為null時則傳回b,a不為空時傳回a本身。空合并運算符為右結合運算符,即操作時從右向左進行組合的。如,“a??b??c”的形 式按“a??(b??c)”計算。