日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中的?和?? 可空类型和空值判断

發(fā)布時間:2025/3/17 C# 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中的?和?? 可空类型和空值判断 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我們先看一個例子,在數(shù)據(jù)庫里面有些數(shù)據(jù)比如說int類型datetime類型是非必填的,所以有的時候這個類型不需要給它一個初始值,直接是null,那么對應(yīng)c#里面的數(shù)據(jù)類型如果是int類型我們需要它是一個null怎么辦呢?

int i; Console.Write(i);//提示這個i沒有賦值不可以使用 i = null;//提示無法把這個null轉(zhuǎn)換成int類型

上面這兩種方式都不可以實現(xiàn)這個需求,所以微軟也挺人性化的給我們提供了一個名為可空類型的新類型,寫法上就是類型后面加?,比如可空類型的int就寫成int?,?在這里就是一個語法糖,編譯器在編譯的時候把他編譯成Nullable<T>,T就是這里的類型。

int? i=null;Nullable<int> a = null;Console.Write(i==a);//結(jié)果為True

當(dāng)然這里的可空類型也存在著拆箱與裝箱,這里來看簡單的例子

int? i=1; object obj = i; Console.Write(obj.GetType());

此時輸出結(jié)果為:

System.Int32

接下來分享一下一個有趣事情,我在看微軟的文檔的時候發(fā)現(xiàn)可空類型有一個異常:System.NullReferenceException

明明是可空類型,為什么還會有空引用的錯誤呢?下面我們來引發(fā)一下這個異常

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 ?? "為空嗎");

結(jié)果:

2 1 str1= str2= str3=為空嗎 str4=不為空

有上面的例子可以得出,左邊為null嗎?為null?選右邊。不為null?選左邊。這里不管是""還是String.Empty都不是null,所以有些時候我們可以省略很多代碼

?

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的C#中的?和?? 可空类型和空值判断的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。