關於c#中的問號

    一個問號---用於給變量設初值的時候,給變量(int類型)賦值爲null,而不是0!
兩個問號---用於判斷並賦值,先判斷當前變量是否爲null,如果是就可以賦一個新值,否則跳過!

比如:

    public int? para;
//public int para;如果不註釋掉此行,而把上一行註釋掉的話,下面會報錯!
 public int par()...{
 return this.para ?? 0;
}


常用在:ViewState,Session之類的地方。

 

 理論知識如下:

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?的拆箱轉換。但是任何情況下可空類型都不滿足接口約束,即使基礎類型實現了該特定接口。
例如:
 class Class1
 {
 int? a = 0;
 int b;
 public Class1()
 {
 a = null; // 編譯通過
 b = null; // 編譯不通過
 }
 }

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)”計算。

本篇內容參考http://blog.tianya.cn/blogger/post_show.asp?BlogID=487277&PostID=16113038

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章