2009年8月17日 星期一

在C#中可為null的型別,bool? int?

在C#中有些型別可以在原有的值域在加上null
而成為System.Nullable結構的執行個體,例如

Nullable<bool> b = null;

語法T?是Nullable<T>的簡略表示法,所以上面也可以表示成

bool? b = null;

把一個變數宣告成Nullable對於使用容許不宣告的變數很方便
不過在使用此型別的變數的時候需要特別小心
因為有時候並沒有被宣告(或是設成了null),所以在轉換成原有形別之前
需要先檢查是否有被設定

public bool ChangeToBool(bool? b)
{
/// check if b is null
if (b.HasValue)
{
return (bool)b;
}
else
{
return false;
}
}

另外,C#裡面也定義了更簡單的null聯合運算子??
所以上面的函式也可以直接寫成

public bool ChangeToBool(bool? b)
{
/// if b is null, return false, otherwise, return b
return b ?? false;
}

注意,透過null聯合運算子的結果就不需要再做型別轉換了
--
參考資料
可為 Null 的型別 (C# 程式設計手冊)
HOW TO:從 bool? 安全轉型至 bool (C# 程式設計手冊)
?? 運算子 (C# 參考)

沒有留言:

張貼留言