在C#中有個較為重要,而常被一些人忽視的符號——問號(?)。在這里整理一下它在C#的幾種情況:
- 可空類型修飾符“T?”:可空類型的基礎類型可以是任何非可空值類型或任何具有struct約束的類型參數,但不能是可空類型或引用類型。例如:int?代表是可空的整形,而int??則是無效類型。即可空類型可以表示其基礎類型的所有值和一個額外的空值。語法T?是System.Nullable<T>的縮寫形式。可空類型具有一個HasValue的bool類型只讀屬性,當可空類型實例的該屬性為true時,則表示該實例是非空實例,包含一個已知值Value;HasValue為false時,訪問Value屬性將導致System.InvalidOperationException。可空類型T?具有一個類型為T的單個參數的公共構造函數,如new int?(123)將獲得一個值為123的int?類型實例。從T?到由T實現的任何接口都存在裝箱轉換,並且從由T實現的任何接口都存在到T?的拆箱轉換。但是任何情況下可空類型都不滿足接口約束,即使基礎類型實現了該特定接口。
- 條件運算符“x ? y : z” : “x ? y : z”的意思大部分程序員應該都熟悉,稍微啰嗦一下:) 如果表達式x為true,則計算y;如果x為false,則計算z。省卻if{}else{}的簡單形式了。
- 空合並運算符“??”:該運算符是在泛型出現后,C#詞法語法中新增加的標記,同時出現的還有一個“::”(命名空間別名限定符)。形式為“a??b”的空合並表達式要求a為可空類型或引用類型。如果a為非空則表達式“a??b”返回的結果為a;否則返回b。空合並運算符為右結合運算符,即操作時從右向左進行組合的。如,“a??b??c”的形式按“a??(bb??cc)”計算。
本文轉載自 http://blog.csdn.net/csdbfans/article/details/5819726
