可為 Null 的型別 (C# 程式設計手冊)
更新:2007 年 11 月
可為 Null 的型別是 System.Nullable<T> 結構的執行個體。可為 Null 的型別能夠代表其基礎實值型別的正確值範圍,加上其他 null 值。例如,Nullable<Int32> (念法是 "Nullable of Int32"),可以指派為從 -2147483648 到 2147483647 的任何值,或是可以指派為 null 值。Nullable<bool> 可以指派為 true、false 或 null 的值。在處理資料庫以及包含並未指派值之項目的其他資料型別時,將 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();
使用 HasValue 和 Value 唯讀屬性測試 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 的型別