C#定義類型後帶問號

來源:互聯網
上載者:User

http://hi.baidu.com/_hkx/blog/item/34dd149b844bc7bec8eaf401.html


int?:表示可空類型,就是一種特殊的實值型別,它的值可以為null
用於給變數設初值得時候,給變數(int類型)賦值為null,而不是0
int??:用於判斷並賦值,先判斷當前變數是否為null,如果是就可以賦役個新值,否則跳過
public int? a=null;
public int b()
{
return this.a ?? 0;
}

實值型別後面加問號表示可為空白null(Nullable 結構)

Nullable是.NET 2.0中新提供的一種用於標明一個實值型別是否可以為空白的技術。

對於一個類型,如果既可以給它分配一個值,也可以給它分配Null 參考null(表示沒有任何值),我們就說這個類型是可空的。

因此,可空類型可表示一個值,或表示不存在任何值。例如,類似 String 的參考型別就是可空類型,而類似 Int32 的實值型別不是可空類型。Nullable 結構支援將實值型別擴充為可以為null,但不支援在參考型別上使用,因為參考型別本身就是可空的。

因為實值型別的容量只夠表示適合於該類型的值,因此它不可為空白;實值型別沒有表示空值所需的額外容量。

例:public int? age;

補充:其它的類型後加問題也是同樣的道理。
int? num = null;   正確
int num=null;     錯誤
---------------------------------------------------------------------------------------------------------------------------
微軟MSDN是提示如下例子:

http://msdn.microsoft.com/zh-cn/support/1t3y8s4s(VS.80).aspx

class NullableExample
{
     static void Main()
     {
         int? num = null;
         if (num.HasValue == true)
         {
             System.Console.WriteLine("num = " + num.Value);
         }
         else
         {
             System.Console.WriteLine("num = Null");
         }

         //y is set to zero
         int y = num.GetValueOrDefault();

         // num.Value throws an InvalidOperationException if num.HasValue is false
         try
         {
             y = num.Value;
         }
         catch (System.InvalidOperationException e)
         {
             System.Console.WriteLine(e.Message);
         }
     }
}


以上將顯示輸出:

num = Null

Nullable object must have a value.

可空類型概述
可空類型具有以下特性:

可空類型表示可被賦值為 null 值的實值型別變數。無法建立基於參考型別的可空類型。(參考型別已支援 null 值。)。

文法 T? 是 System.Nullable<T> 的簡寫,此處的 T 為實值型別。這兩種形式可以互換。

為可空類型賦值與為一般實值型別賦值的方法相同,如 int? x = 10; 或 double? d = 4.108;。

如果基礎類型的值為 null,請使用 System.Nullable.GetValueOrDefault 屬性返回該基礎類型所賦的值或預設值,例如 int j = x.GetValueOrDefault();

請使用 HasValue 和 Value 唯讀屬性測試是否為空白和檢索值,例如 if(x.HasValue) j = x.Value;

如果此變數包含值,則 HasValue 屬性返回 True;或者,如果此變數的值為空白,則返回 False。

如果已賦值,則 Value 屬性返回該值,否則將引發 System.InvalidOperationException。

可空類型變數的預設值將 HasValue 設定為 false。未定義 Value。

使用 ?? 運算子分配預設值,當前值為空白的可空類型被賦值給非空類型時將應用該預設值,如 int? x = null; int y = x ?? -1;。

不允許使用嵌套的可空類型。將不編譯下面一行:Nullable<Nullable<int>> n;11


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.