當前位置:
首頁 > 知識 > C 對可空值類型的支持

C 對可空值類型的支持


System.Nullable<T>是結構。

1、C# 對可空值類型的支持

C# 允許用問號表示法來聲明可空值類型,如:


Int32? x = 5;

Int32? y = null;

System.Nullable<T>應用操作符解析規則:

  • 一元操作符(+, ++, -, --, !, ~) 操作數是 null ,結果就是 null。

  • 二元操作符(+, -, *, /, %, &, |, ^, <<, >>) 兩個操作數任何一個是 null ,結果就是
    null . 但有一個例外,它發生在將 & 和 | 操作符應用於 Boolean? 操作數的時候.這種情況和 SQL 的三值邏輯一樣.都不為 null
    ,正常計算;都為 null ,結果為 null ;其一為 null 時,見下面示例:

null & true = null ; null | true = true ; null & false = false ; null | false = null ;

  • 相等操作符(==, !=) 兩個操作數都是 null,兩者相等; 一個操作數是 null, 兩者不相等;兩個操作數都不是
    null,就比較值來判斷是否相等。

  • 關係操作符(<, >, <=, >=) 兩個操作數任何一個是 null,結果就是 false ,兩個操作數都不是
    null,就比較值。

  • 操作可空實例會生成大量代碼,且速度慢於非可空類型。

  • 定義自己的值類型來重載操作符,編譯器能正確識別它並調用你重載的操作符(方法)。

2、C# 的空接合操作符

  • C# 提供了一個"空接合操作符",即 ?? 操作符,它要取兩個操作數.假如左邊的操作數不為
    null,就返回這個操作數的值,否則,就返回右邊的操作數的值。

  • 既可用於引用類型,也能用於可空值類型。

int? b = null;

//下面等價於:

// x =(b.HasValue) ? b.Value : 123int x = b ?? 123;
Console.WriteLine(x); // "123"//下面這行等價於:

// string temp = GetFilename();

// filename = (temp != null) ? temp : "Untitled";

string filename = GetFilename() ?? "Untitled";

3、CLR 對可空值類型的特殊支持

裝箱: 當 CLR 對 Nullable實例進行裝箱時,會檢查它是否為 null .如果是,CLR 不裝箱任何東西,直接返回 null .
如果不為 null , CLR 從可空實例中取出值並進行裝箱.

拆箱:

//創建已裝箱的 Int32

object o = 5;

//把它拆箱為一個 Nullable<int>和一個int

int? a = (int?)o; // a = 5

int b = (int)o; // a = 5

//創建初始化為null的一個引用
o = null;

a = (int?)o; // a = null

b = (int)o; // NullReferenceException

在 Nullable對象上調用 GetType,會返回 T 的類型

Nullable類型的變數 n 可以轉型為介面類型 IComparable

int? n = 5;

int result = ((IComparable)n).CompareTo(5);

Console.WriteLine(result);

中公優就業IT培訓,總有你想學的:http://xue.ujiuye.com

勤工儉學計劃,0元學IT!

http://www.ujiuye.com/zt/qgjx/?wt.bd=mmxtt

找工作太難?好漢,讓我助你一臂之力!

http://www.ujiuye.com/zt/jyfc/?wt.bd=mmxtt

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT優就業 的精彩文章:

SpringMVC詳解——基於註解的入門實例
插入排序演算法之直接插入排序和希爾排序
程序員的一天:不是在苦逼,就是在苦逼的路上
SpringMVC詳解——詳細架構
macvlan 網路隔離和連通-每天5分鐘玩轉 Dock

TAG:IT優就業 |

您可能感興趣

JS 中對變數類型的判斷
鯰魚臉的女生適合啥髮型?4種類型髮型LOOK,讓你秒變高級臉
癲癇的各種類型所對應的危害
什麼類型的刀才有資格稱之為EDC?
VBA之數據類型和常量與變數
XSD 數值數據類型
如何簡單有效的從同類型P2P平台中挑選出性價比更高的
P2P哪種資產類型最可靠?
C++模板取函數參數類型和返回值類型的方法
兩種類型的抑鬱
Salk研究所開發「通用型」基因編輯工具,可靶向多種突變和細胞類型
內向型 vs 外向型:如何判斷你的類型,並有針對性地提高生產力?
追TFBOYS的時候有哭過嗎?粉絲的回答可分為三種類型
穿搭出真性情,三款值得關注的酷Girl類型腕錶推薦
伺服器三種DIMM類型的區別及應用
不同類型肺水腫的CT表現
JACC研究:心碎綜合征有三種類型,死亡風險不低於心梗
面對愛情里的衝突,你是哪種應對類型?丨愛情衝突類型評估
所有類型的輕型卒中和TIA,都能從雙抗中獲益嗎?
優步推出多種類型:用戶現在可自由選擇