今天就跟大家聊聊有關(guān)怎么在C#中使用可空類型,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、臨夏網(wǎng)絡(luò)推廣、微信小程序定制開發(fā)、臨夏網(wǎng)絡(luò)營銷、臨夏企業(yè)策劃、臨夏品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供臨夏建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
1、可空類型基礎(chǔ)知識
顧名思義,可空類型指的就是某個(gè)對象類型可以為空,同時(shí)也是System.Nullable結(jié)構(gòu)的實(shí)例??煽疹愋涂梢员硎净A(chǔ)值類型正常范圍的值,然后再加上一次null值。當(dāng)然,也可以被賦值null值。比如Nullable
可以被賦值true、false或者null。
聲明一個(gè)可空類型的標(biāo)準(zhǔn)語句如下:
T? myNullableNum = rangedNum/new T?() or null;
比如,我們聲明一個(gè)可空值類型并賦值null;
int? intClass = null;
或者使用
int? intClass = new int?()
同時(shí),我們都知道,可空類型是泛型Nullable
的實(shí)例,聲明如下:
NullablemyNullableClass = new Nullable ();
從聲明中可以看出,它的基礎(chǔ)類型T是可以包括struct
和enum
在內(nèi)的任何值類型,但是不能是引用類型,也不能是可空類型;從這里我們可以看出,可能類型不能嵌套使用。
在可空類型中,它包含以下實(shí)例成員:
首先是HasValue
,它是只讀屬性,用于判斷對象是否有值。如果當(dāng)前值非空,則返回true,否則返回flase;其次是Value
,它也是只讀屬性,用于獲取對象的值。如果當(dāng)前值非空,則可以正常獲取到對應(yīng)的值,否則會(huì)拋出異常InvalidOperationException;接著是GetValueOrDefault()
的實(shí)例方法。該方法通過HasValue和Value屬性來得到當(dāng)前的信息。如果當(dāng)前值非空,即HasValue是true,則返回Value的值;否則返回T類型的默認(rèn)值,即私有字段value的默認(rèn)值。最后一個(gè)是GetValueOrDefault()
實(shí)例方法。該方法依然是通過HasValue和Value屬性來得到當(dāng)前的信息。如果當(dāng)前值非空,即HasValue是true,則返回Value的值,否則返回默認(rèn)值defaultValue。
如果將可空類型轉(zhuǎn)換為其基礎(chǔ)類型,需要使用強(qiáng)制轉(zhuǎn)換或其Value屬性獲?。?/p>
int myInt = (int)myNullableInt; int myInt = myNullableInt.Value; //以上兩種方式,在可空類型實(shí)例為null時(shí)會(huì)拋出異常,可以使用以下方式代替 int myInt = myNullableInt.GetValueOrDefault(); //其重載方法可以傳入默認(rèn)值
2、可空類型的使用
在可空類型中,常見的有使用單問號?和雙問號??來進(jìn)行設(shè)置。其中?常用于int,double,bool等無法直接賦值為null的數(shù)據(jù)類型;所代表的含義是這個(gè)數(shù)據(jù)類型是Nullable類型。
int? k=10; 等同于 Nullablek = new Nullable (10); int m; //默認(rèn)值為0 int? m; //默認(rèn)值為null
而??主要用于在判斷對象的值為null時(shí)所返回的指定的值。
int? num = null; var k == num ?? 9;
對于可空類型,屬于一種特殊的數(shù)據(jù)類型,它可表示所對應(yīng)的基礎(chǔ)值類型中正常范圍內(nèi)的值,再加上一個(gè)null值。
比如說一個(gè)int類型的對象,它可以被賦值為-2,147,483,648到2,147,483,647之間的任意值,也可以被賦值為null值。而對于一個(gè)bool類型的值來說,它可以是true、false也可以是null。
聲明一個(gè)nullable類型(可控類型)的語法如下:
? = null;
以下示例說明:
using System; namespace ExampleTest { class Program { static void Main(string[] args) { int? objectNull = null; int? k = 80; double? db1 = new double?(); double? db2 = 4.56; bool? b = new bool?(); Console.WriteLine($"顯示可空類型{objectNull},{k},{db1},{db2}"); Console.WriteLine($"一個(gè)可空的布爾值:"); Console.ReadLine(); } } }
而對于??的合并運(yùn)算符,它主要用于定義可空類型和引用類型的默認(rèn)值。在其運(yùn)算過程中,為類型轉(zhuǎn)換定義了一個(gè)預(yù)設(shè)值,防止可空類型的值是null。
using System; namespace ExampleTest { class Program { static void Main(string[] args) { double? objNull = null; double? k = 4.85; double db; db = objNull ?? 9.82; Console.WriteLine($"num3的值:{db}"); db = k ?? 6.02; Console.WriteLine($"num3的值:{db}"); Console.ReadLine(); } } }
3、可空類型的案例使用
通過一個(gè)簡單的前端查詢功能來看看可空類型的使用。
頁面html
姓名: 性別:
傳入?yún)?shù)Dto
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebTest.Models { public class TestInDto { ////// 隔離點(diǎn) /// public int? Kum { get; set; } ////// 姓名 /// public string Name { get; set; } } }
控制器
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using WebTest.Models; namespace WebTest.Controllers { public class TestController : Controller { // GET: Test public ActionResult Index() { return View(); } public ActionResult TestFunction(TestInDto testInDto) { if (!testInDto.Kum.HasValue) return Json(new { Success = false, Message = "請選擇性別", Data = "" }); int? num = null; DateTime? dt = null; bool? b = null; var data = new TestOutDto { Name = testInDto.Name, Num = num ?? 10, Dt = dt ?? DateTime.Now, IsExist = b ?? false }; return Json(new { Success = true, Message = "", Data = data }); } } }
看完上述內(nèi)容,你們對怎么在C#中使用可空類型有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。