共用方式為


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

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

class NullableExample
{
    static void Main()
    {
        int? num = null;

        // Is the HasValue property true? 
        if (num.HasValue)
        {
            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 的類型 (C# 程式設計手冊)

可為 Null 的型別概觀

可為 Null 的型別有下列特性:

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

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

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

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

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

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

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

    • HasValue 的預設值為 false。 Value 屬性沒有預設值。

    • 您也可以將 == 和 != 運算子使用於可為 Null 的型別,如下列範例所示:if (x != null) y = x;

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

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

相關章節

如需詳細資訊,請參閱下列主題:

C# 語言規格

如需詳細資訊,請參閱<C# 語言規格>。語言規格是 C# 語法及用法的限定來源。

請參閱

參考

Nullable

概念

C# 程式設計手冊

其他資源

C# 參考

Visual C#

哪些完全「被列舉的」方法?