国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > C# > 正文

C#基礎(chǔ)知識 全面解析可空類型

2020-01-24 03:38:40
字體:
供稿:網(wǎng)友

引言:

  C# 2.0 中還引入了可空類型,可空類型也是值類型,只是可空類型是包括null的值類型的,下面就介紹下C#2.0中對可空類型的支持具體有哪些內(nèi)容(最近一直都在思考如何來分享這篇文章的,因為剛開始覺得可空類型使用過程中比較簡單,覺得沒有講的必要,但是考慮到這個系列的完整性,決定還是嘮叨下吧,希望對一些不熟悉的人有幫助)。

一、為什么會有可空類型

   如果朋友們看了我之前的分享,對于這一部分都不會陌生,因為我一般介紹C#特性經(jīng)常會以這樣的方式開頭的, 因為每個特性都是有它出現(xiàn)的原因的(有一句佛語這是這么講的:萬事皆有因,有因必有果),首先來說說這個因的(果當(dāng)然是新增加了可空類型這個新特性了。),當(dāng)我們在設(shè)計數(shù)據(jù)庫的時候,我們可以設(shè)置數(shù)據(jù)庫字段允許為null值,如果數(shù)據(jù)庫字段是日期等這樣在C#語言是值類型時,當(dāng)我們把數(shù)據(jù)庫表映射一個對象時,此時Datetime類型在C# 語言中是不能為null的,如果這樣就會與數(shù)據(jù)庫的設(shè)計有所沖突,這樣開發(fā)人員就會有這樣的需求了――值類型能不能也為可空類型的?同時微軟也看出了用戶有這樣的需求,所以微軟在C# 2.0中就新增加了一種類型――可空類型,即包含null值的值類型,這個也就是我理解的因了,介紹完因之后,當(dāng)然就是好好嘮叨下可空類型是個什么東西的了?

二、可空類型的介紹

   可空類型也是值類型,只是它是包含null的一個值類型。我們可以像下面這樣表示可空類型(相信大家都不陌生):

復(fù)制代碼 代碼如下:

int? nullable = null;

  上面代碼 int? 就是可空的int類型(有人可能會這樣的疑問的, 如果在C#1中我硬要讓一個值類型為一個可空類型怎么辦到呢?當(dāng)然這個在C#1之前也是有可以辦到的,只是會相當(dāng)麻煩,對于這個如果有興趣的朋友可以去刨下根),然而其實 "?"這個修飾符只是C#提供的一個語法糖(所謂語法糖,就是C#提供的一種方便的形式,其實肯定沒有int? 這個類型,這個int?編譯器認(rèn)為的就是Nullable<int>類型,即可空類型),其實真真C# 2.0提供的可空類型是――Nullable<T>(這個T就是上專題介紹的泛型參數(shù),其中T只能為值類型,因為從可空類型的定義為:public struct Nullable<T> where T : struct)和Nullable。下面給出一段代碼來介紹可空類型的使用:

復(fù)制代碼 代碼如下:

namespace 可空類型Demo
{
class Program
{
static void Main(string[] args)
{
// 下面代碼也可以這樣子定義int? value=1;
Nullable<int> value = 1;

Console.WriteLine("可空類型有值的輸出情況:");
Display(value);
Console.WriteLine();
Console.WriteLine();

value = new Nullable<int>();
Console.WriteLine("可空類型沒有值的輸出情況:");
Display(value);
Console.Read();
}

// 輸出方法,演示可空類型中的方法和屬性的使用
private static void Display(int? nullable)
{
// HasValue 屬性代表指示可空對象是否有值
// 在使用Value屬性時必須先判斷可空類型是否有值,
// 如果可空類型對象的HasValue返回false時,將會引發(fā)InvalidOperationException異常
Console.WriteLine("可空類型是否有值:{0}", nullable.HasValue);
if (nullable.HasValue)
{
Console.WriteLine("值為: {0}", nullable.Value);
}

// GetValueOrDefault(代表如果可空對象有值,就用它的值返回,如果可空對象不包含值時,使用默認(rèn)值0返回)相當(dāng)與下面的語句
// if (!nullable.HasValue)
// {
// result = d.Value;
// }

Console.WriteLine("GetValueorDefault():{0}", nullable.GetValueOrDefault());

// GetValueOrDefault(T)方法代表如果 HasValue 屬性為 true,則為 Value 屬性的值;否則為 defaultValue 參數(shù)值,即2。
Console.WriteLine("GetValueorDefalut重載方法使用:{0}", nullable.GetValueOrDefault(2));

// GetHashCode()代表如果 HasValue 屬性為 true,則為 Value 屬性返回的對象的哈希代碼;如果 HasValue 屬性為 false,則為零
Console.WriteLine("GetHashCode()方法的使用:{0}", nullable.GetHashCode());
}
}
}

輸出結(jié)果:

上面的演示代碼中都注釋,這里就不再解釋了,為了讓大家明白進一步理解可空類型是值類型,下面貼出中間語言代碼截圖:

三、空合并操作符(?? 操作符)

  ??操作符也就是"空合并操作符",它代表的意思是兩個操作數(shù),如果左邊的數(shù)不為null時,就返回左邊的數(shù),如果左邊的數(shù)為null,就返回右邊的數(shù),這個操作符可以用于可空類型,也可以用于引用類型,但是不能用于值類型(之所以不能應(yīng)用值類型(這里除了可空類型),因為??運算符要對左邊的數(shù)與null進行比較,然而值類型,不能與null類型比較,所以就不支持??運算符),下面用一個例子來掩飾下??運算符的使用(??這個運算符可以方便我們設(shè)置默認(rèn)值,可以避免在代碼中寫if, else語句,簡單代碼數(shù)量,從而有利于閱讀。)

復(fù)制代碼 代碼如下:

static void Main(string[] args)
{
Console.WriteLine("??運算符的使用如下:");
NullcoalescingOperator();
Console.Read();
}

private static void NullcoalescingOperator()
{
int? nullable = null;
int? nullhasvalue = 1;

// ??和三目運算符的功能差不多的
// 所以下面代碼等價于:
// x=nullable.HasValue?b.Value:12;
int x = nullable ?? 12;

// 此時nullhasvalue不能null,所以y的值為nullhasvalue.Value,即輸出1
int y = nullhasvalue ?? 123;
Console.WriteLine("可空類型沒有值的情況:{0}",x);
Console.WriteLine("可空類型有值的情況:{0}", y);

// 同時??運算符也可以用于引用類型, 下面是引用類型的例子
Console.WriteLine();
string stringnotnull = "123";
string stringisnull = null;

// 下面的代碼等價于:
// (stringnotnull ==null)? "456" :stringnotnull
// 同時下面代碼也等價于:
// if(stringnotnull==null)
// {
// return "456";
// }
// else
// {
// return stringnotnull;
// }
// 從上面的等價代碼可以看出,有了??運算符之后可以省略大量的if―else語句,這樣代碼少了, 自然可讀性就高了
string result = stringnotnull ?? "456";
string result2 = stringisnull ?? "12";
Console.WriteLine("引用類型不為null的情況:{0}", result);
Console.WriteLine("引用類型為null的情況:{0}", result2);
}

下面是運行結(jié)果截圖:

四、可空類型的裝箱和拆箱

   值類型存在裝箱和拆箱的過程,可空類型也屬于值類型,從而也有裝箱和拆箱的過程的, 這里先介紹下裝箱和拆箱的概念的, 裝箱指的的從值類型到引用類型的過程,拆箱當(dāng)然也就是裝箱的反過程,即從引用類型到值類型的過程(這里進一步解釋下我理解的裝箱和拆箱,首先.Net中值類型是分配在堆棧上的,然而引用類型分配在托管堆上,裝箱過程就是把值類型的值從推棧上拷貝到托管堆上,然后推棧上存儲的是對托管堆上拷貝值的引用,然而拆箱就是把托管堆上的值拷貝到堆棧上.簡單一句話概況,裝箱和拆箱就是一個值的拷貝的一個過程,就想搬家一樣,把東西從一個地方搬到另一個地方,對于深入的理解,大家可以參考下園中的博文.), 括號中是我理解的裝箱和拆箱的過程,下面就具體介紹下可空類型的裝箱和拆箱的:

  當(dāng)把一個可空類型賦給一個引用類型變量時,此時CLR 會對可空類型(Nullable<T>)對象進行裝箱處理,首先CLR會檢測可空類型是否為null,如果為null,CLR則不進行實際的裝箱操作(因為null可以直接賦給一個引用類型變量),如果不為null,CLR會從可空類型對象中獲取值,并對該值進行裝箱(這個過程就是值類型的裝箱過程了。),當(dāng)把一個已裝箱的值類型賦給一個可空類型變量時,此時CLR會對已裝箱的值類型進行拆箱處理,如果已裝箱值類型的引用為null,此時CLR會把可空類型設(shè)為null(如果覺得国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

www狠狠操| 天堂资源最新在线| 国产网站av| 国产一二区在线| 国产极品嫩模在线视频一区| 国产精品视频福利一区二区| 69视频在线观看| 精品999视频| 怡红院av在线| 麻豆国产在线播放| √天堂8资源中文在线| 精品卡一卡卡2卡3网站| 狂野欧美性猛交xxxx乱大交| 尤物网站在线| 日本不卡影院| 国产福利三区| 国产理论片免费观看| 99热免费观看| 国产小视频免费在线网址| 夜夜操天天干| 国产二区三区在线| 国产美女高潮| eeuss影院在线| 最近中文字幕在线中文视频| 国产精品bbw一区二区三区| 青青在线视频| 一级二级在线观看| 国产激情视频一区二区| 二人午夜免费观看在线视频| 天天噜天天色| gogo在线观看| av男人的天堂网| 2019中文字幕在线电影免费| 丁香六月婷婷| 国产在线观看a| 久蕉依人在线视频| 啪啪免费视频一区| 精灵使的剑舞无删减版在线观看| 免费看黄视频网站| av在线播放网| 免费看的av| 国产资源在线看| 国产精品一区牛牛影视| 青草青在线视频| 成人精品福利| 国产精品69一区二区三区| 国产区成人精品视频| 国产亚洲精品午夜高清影院| 中文字幕在线免费| 国产婷婷视频在线| 国产黄大片在线观看画质优化| 国产精品入口麻豆高清| 69精品视频| 亚洲妇熟xxxx妇色黄| 青青草原av在线| 国产一级二级在线| 国产福利资源| 四虎成人精品在永久免费| 日本免费一二区| 国产一卡2卡3卡免费网站| 国产午夜三区视频在线| 中文字幕av在线| 国产老肥熟xxxx在线观看| 国产精品178页| 日本黄色免费网址| 中文字幕一区免费| 天堂√中文在线| 国产午夜视频在线观看| 在线视频中文字幕第一页| xxxxx中文字幕| 国产探花在线观看| 亚洲社区在线| 国产精品美女视频免费观看软件 | 免费看的av| 国产黄色片在线播放| eeuss影院www在线观看| 最新国产在线精品91尤物| 国产成人福利| 国产在线你懂得| 在线视频xx| 国产丝袜在线| 激情在线视频播放| 伊人影院在线视频| 国产精彩视频在线观看免费蜜芽| baoyu777.永久免费视频| 国产精品二线| 国产精品白浆流出视频| 五月天天在线| 国产精品自拍亚洲| 国产中文字幕第一页| 俺来俺也去www色在线观看| 在线视频1区2区| 99视频在线观看地址| 精品美女在线观看视频在线观看 | www网站在线观看| 136福利第一导航国产在线| 国产一级黄色片免费| 国产美女高潮| 天堂在线亚洲| 国产美女高潮一区二区三区| 国产原创av在线| 欧美日韩不卡中文字幕在线| 亚洲第一页在线播放| av中文字幕在线看| 亚洲精品天堂在线| www中文字幕在线观看| 天天噜天天色| 免费精品国产自产拍在| 高清欧美精品xxxxx在线看| 豆国产97在线|亚洲| 国产午夜三区视频在线| 国产精品99999| 精品久久av| 日本高清中文字幕在线| 美女网站在线观看| 88av在线| 国产高清在线视频| 亚洲国产日韩成人综合天堂| www.蜜桃av| 国产亚洲精品久久久久久青梅| 国产天堂在线| 香蕉视频在线观看网站| 黄色国产网站在线播放| 国产性色视频| 美女被人操视频在线观看| 中文字幕视频在线免费| 99热国产在线| 国产美女性感在线观看懂色av| 国产不卡一卡2卡三卡4卡5卡在线| 亚洲精品午夜级久久久久| 国产理论电影在线观看| 国产激情自拍| 黄网站app在线观看下载视频大全官网| 中文字幕在线资源| www中文字幕在线观看| 国产福利视频在线| 国产小视频在线高清播放| 日本不卡影院| 在线免费观看黄色av| 最近中文字幕在线中文视频| 亚洲欧美久久婷婷爱综合一区天堂| 成年网在线观看免费观看网址| 2021天堂中文幕一二区在线观| 国内a∨免费播放| www.91在线播放| 香蕉视频在线观看www| 91这里只有精品| 五月综合激情在线| 国产中文在线视频| 另类综合图区| 欧美性猛交xxxxbbbb| 性欧美精品xxxx| av人人综合网| 夜夜嗨yeyeh| 伊人永久在线| 在线观看av资源网| 精品国产丝袜高跟鞋| 国产精品久久久久一区二区国产| 国产麻豆高清视频在线第一页 | 国产一级粉嫩xxxx| 天堂在线免费观看| 国产主播色在线| 久草.com| 国产麻豆视频| 国产精品视频福利一区二区| 国产欧美日韩专区| 999精品网| 欧美日韩视频精品一区二区| 久久亚洲国产成人亚| 最近中文字幕av免费高清| 国产一二三区在线观看| 国产福利在线播放| 日韩不卡高清| 超碰免费在线播放| 国产免费黄视频在线观看| 午夜免费视频在线国产| 国产成人精品自线拍| 在线观看av中文| 国产在线观看色| 国产精品久久精品牛牛影视| 精品剧情v国产在线观看| av免费在线观看网站| 国产在线传媒| 中文在线视频观看| 欧美卡一卡二| 国产精品爱久久久久久久小说| 中文视频在线| 狠狠干在线视频| 国产激情网址| 免费男女羞羞的视频网站中文字幕| 国产毛片毛片| 亚洲大香人伊一本线| 国产精品午夜久久久久久| 91精品专区| 中文字幕在线资源| 欧美日韩视频精品二区| 国产三级视频在线播放线观看| eeuss在线观看| 精品欧美日韩一区二区| 国产精品一区二区资源|