C#中的?和?? 可空类型和空值判断
我們先看一個例子,在數據庫里面有些數據比如說int類型datetime類型是非必填的,所以有的時候這個類型不需要給它一個初始值,直接是null,那么對應c#里面的數據類型如果是int類型我們需要它是一個null怎么辦呢?
int i; Console.Write(i);//提示這個i沒有賦值不可以使用 i = null;//提示無法把這個null轉換成int類型上面這兩種方式都不可以實現這個需求,所以微軟也挺人性化的給我們提供了一個名為可空類型的新類型,寫法上就是類型后面加?,比如可空類型的int就寫成int?,?在這里就是一個語法糖,編譯器在編譯的時候把他編譯成Nullable<T>,T就是這里的類型。
int? i=null;Nullable<int> a = null;Console.Write(i==a);//結果為True當然這里的可空類型也存在著拆箱與裝箱,這里來看簡單的例子
int? i=1; object obj = i; Console.Write(obj.GetType());此時輸出結果為:
System.Int32接下來分享一下一個有趣事情,我在看微軟的文檔的時候發現可空類型有一個異常:System.NullReferenceException
明明是可空類型,為什么還會有空引用的錯誤呢?下面我們來引發一下這個異常
int? a = null; Console.WriteLine(a.GetType());這里我們可以看出,可空類型的null是一個值類型的空而不是引用類型的null,所以,在我們需要知道它的類型的時候會把這個類型拆箱,但是int類型是沒有null的,所以我們在查看它的類型的時候就拋出了這個異常。
下面我們來看看??。空合并操作符,使用的時候就是兩個問號。什么個意思呢?我們先看看下面的例子
int? a = null; Console.WriteLine(a ?? 2); int? b = 1; Console.WriteLine(b ?? 2);string str1 = ""; Console.WriteLine("str1={0}",str1 ?? "為空嗎"); string str2 = string.Empty; Console.WriteLine("str2={0}", str2 ?? "為空嗎"); string str3 = null; Console.WriteLine("str3={0}", str3 ?? "為空嗎"); string str4 = "不為空"; Console.WriteLine("str4={0}", str4 ?? "為空嗎");結果:
2 1 str1= str2= str3=為空嗎 str4=不為空有上面的例子可以得出,左邊為null嗎?為null?選右邊。不為null?選左邊。這里不管是""還是String.Empty都不是null,所以有些時候我們可以省略很多代碼
?
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的C#中的?和?? 可空类型和空值判断的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 散度、旋度与 Laplacian
- 下一篇: 安全扫描工具Nmap引擎理解文档