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