Share via


可為 Null 的型別 (C# 程式設計手冊)

更新:2007 年 11 月

可為 Null 的型別是 System.Nullable<T> 結構的執行個體。可為 Null 的型別能夠代表其基礎實值型別的正確值範圍,加上其他 null 值。例如,Nullable<Int32> (念法是 "Nullable of Int32"),可以指派為從 -2147483648 到 2147483647 的任何值,或是可以指派為 null 值。Nullable<bool> 可以指派為 truefalsenull 的值。在處理資料庫以及包含並未指派值之項目的其他資料型別時,將 null 指派給數字和布林型別的功能就特別有用。例如,資料庫中的布林欄位能夠儲存值 true 或 false,或者也可能未定義。

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 的型別有下列特性:

  • 可為 Null 的型別代表能夠指派 null 值的實值型別變數。您無法根據參考型別建立可為 Null 的型別 (參考型別已支援 null 值)

  • 語法 T?Nullable<T> 的簡略表示法,其中 T 是實值型別。兩種格式可以互相變更

  • 就像針對一般實值型別一樣,將值指派至可為 Null 的型別,例如 int? x = 10; 或 double? d = 4.108;

  • 使用 Nullable<T>.GetValueOrDefault 方法傳回指派的值;若值為 null,則傳回基礎型別的預設值,例如 int j = x.GetValueOrDefault();

  • 使用 HasValueValue 唯讀屬性測試 null 並擷取值,例如 if(x.HasValue) j = x.Value;

    • 如果變數包含值 HasValue 屬性會傳回 true,而如果變數是 null 則傳回 false

    • 如果有指派值,Value 屬性便會傳回值。否則,會擲回 System.InvalidOperationException

    • 可為 Null 的型別變數預設值會將 HasValue 設定為 false。Value 則未定義

  • 當目前值為 null 的可為 Null 型別指派至不可為 Null 的型別時,請使用 ?? 運算子指派將套用的預設值,例如 int? x = null; int y = x ?? -1;

  • 不允許巢狀式可為 Null 的型別。不會編譯下列程式碼行:Nullable<Nullable<int>> n;

相關章節

如需詳細資訊︰

C# 語言規格

如需詳細資訊,請參閱 C# 語言規格中的下列章節:

  • 4.1.10 可為 Null 的型別

請參閱

工作

可為 Null 的範例

概念

C# 程式設計手冊

參考

Nullable

其他資源

Visual C#

C# 參考

「增益」究竟是什麼意思?