在項目中我們經(jīng)常會遇到可為空類型,那么到底什么是可為空類型呢?下面我們將從4個方面為大家剖析。
成都創(chuàng)新互聯(lián)專業(yè)成都網(wǎng)站設(shè)計、網(wǎng)站制作,集網(wǎng)站策劃、網(wǎng)站設(shè)計、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營銷、軟文平臺等專業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計,讓網(wǎng)站在運行后,在搜索中有好的表現(xiàn),專業(yè)設(shè)計制作為您帶來效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。
1、可空類型基礎(chǔ)知識
顧名思義,可空類型指的就是某個對象類型可以為空,同時也是System.Nullable結(jié)構(gòu)的實例??煽疹愋涂梢员硎净A(chǔ)值類型正常范圍的值,然后再加上一次null值。當(dāng)然,也可以被賦值null值。比如Nullable<bool>可以被賦值true、false或者null。
聲明一個可空類型的標(biāo)準(zhǔn)語句如下:
T? myNullableNum = rangedNum/new T?() or null;
比如,我們聲明一個可空值類型并賦值null;
int? intClass = null;
或者使用
int? intClass = new int?()
同時,我們都知道,可空類型是泛型Nullable<T>的實例,聲明如下:
Nullable<int> myNullableClass = new Nullable<int>();
從聲明中可以看出,它的基礎(chǔ)類型T是可以包括struct和enum在內(nèi)的任何值類型,但是不能是引用類型,也不能是可空類型;從這里我們可以看出,可能類型不能嵌套使用。
在可空類型中,它包含以下實例成員:
首先是HasValue,它是只讀屬性,用于判斷對象是否有值。如果當(dāng)前值為空,則返回true,否則返回flase;其次是Value,它也是只讀屬性,用于獲取對象的值。如果當(dāng)前值非空,則可以正常獲取到對應(yīng)的值,否則會拋出異常InvalidOperationException;接著是GetValueOrDefault()的實例方法。該方法通過HasValue和Value屬性來得到當(dāng)前的信息。如果當(dāng)前值非空,即HasValue是true,則返回Value的值;否則返回T類型的默認(rèn)值,即私有字段value的默認(rèn)值。最后一個是GetValueOrDefault()實例方法。該方法依然是通過HasValue和Value屬性來得到當(dāng)前的信息。如果當(dāng)前值非空,即HasValue是true,則返回Value的值,否則返回默認(rèn)值defaultValue。
2、可空類型的使用
在可空類型中,常見的有使用單問號?和雙問號??來進行設(shè)置。其中?常用于int,double,bool等無法直接賦值為null的數(shù)據(jù)類型;所代表的含義是這個數(shù)據(jù)類型是Nullable類型。
int? k=10;
等同于
Nullable<int> k = new Nullable<int>(10);
int m; //默認(rèn)值為0
int? m; //默認(rèn)值為null
而??主要用于在判斷對象的值為null時所返回的指定的值。
int? num = null;
var k == num ?? 9;
對于可空類型,屬于一種特殊的數(shù)據(jù)類型,它可表示所對應(yīng)的基礎(chǔ)值類型中正常范圍內(nèi)的值,再加上一個null值。
比如說一個int類型的對象,它可以被賦值為-2,147,483,648到2,147,483,647之間的任意值,也可以被賦值為null值。而對于一個bool類型的值來說,它可以是true、false也可以是null。
聲明一個nullable類型(可控類型)的語法如下:
<data_type>?<variable_name> = 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($"一個可空的布爾值:");
Console.ReadLine();
}
}
}
而對于??的合并運算符,它主要用于定義可空類型和引用類型的默認(rèn)值。在其運算過程中,為類型轉(zhuǎn)換定義了一個預(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、可空類型的案例使用
通過一個簡單的前端查詢功能來看看可空類型的使用。
頁面html
<div>
姓名:<input id="Name" name="Name" />
性別:<select id="Kum" name="Kum">
<option value="0">--請選擇--</option>
<option value="1">男</option>
<option value="2">女</option>
</select>
</div>
傳入?yún)?shù)Dto
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebTest.Models
{
public class TestInDto
{
/// <summary>
/// 隔離點
/// </summary>
public int? Kum { get; set; }
/// <summary>
/// 姓名
/// </summary>
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 });
}
}
}
4、總結(jié)
最后想說說,可空類型在日常的項目中還是會經(jīng)常使用到,針對每個邏輯層的方法對于傳入?yún)?shù)和返回參數(shù)而言,都可能存在使用可空類型來進行處理和轉(zhuǎn)化。
分享題目:什么是可為空類型?
分享路徑:http://www.ekvhdxd.cn/article30/ghdjso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、Google、網(wǎng)站改版、小程序開發(fā)、網(wǎng)站內(nèi)鏈、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)