国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

可空類型(Nullable<T>)及其引出的關(guān)于explicit、implicit的使用

2019-11-17 02:33:59
字體:
供稿:網(wǎng)友

可空類型(Nullable<T>)及其引出的關(guān)于explicit、implicit的使用

問題一:Nullable<T>可賦值為null

先看兩行C#代碼

            int? i1 = null;            int? i2 = new int?();        

int? 即Nullable<int>,就像int之于Int32;

Nullable<T>是非常特殊結(jié)構(gòu)類型,它可賦值為null(所以此前我還以為是引用類型),其本質(zhì)是等同于new;

通過調(diào)試可發(fā)現(xiàn)上述兩個(gè)值均為null,但是事實(shí)上我們卻可以調(diào)用他們的一些屬性方法比如“HasValue”,由此可見“=null“只是障眼法罷了;

此時(shí)如果調(diào)用他們的”Value“屬性將引發(fā)”InvalidOperationException“異常,注意不是空引用異常,異常信息為”其他信息: 可為空的對(duì)象必須具有一個(gè)值。”;

建議對(duì)于此類型的取值使用“GetValueOrDefault”方法來獲取,而不是判斷HasValue后去Value值;

其次建議不進(jìn)行” == null “的邏輯判斷,應(yīng)使用HasValue屬性。

問題二:Nullable<T> 可賦值為 T類型

仍然看兩行C#代碼

            int? iNull = 2;            int i = (int)iNull;

非常常見的代碼,但是每行代碼都包含了類型,“int?”與int之間的隱式轉(zhuǎn)換與顯示轉(zhuǎn)換,而支持可空類型轉(zhuǎn)換的就是Nullable<T>提供了兩個(gè)方法:

        public static explicit operator T(Nullable<T> value);        public static implicit operator Nullable<T>(T value);

operator是運(yùn)算符重載,因而這倆貨也可以看成是對(duì)“=”的運(yùn)算符重載,explicit支持了顯示轉(zhuǎn)換,implicit支持了隱式轉(zhuǎn)換,使用如下:

    class UserInfo    {        public int ID { get; set; }        public string Name { get; set; }        public static explicit operator UserInfo(int id)        {            Console.WriteLine("獲取用戶ID為【{0}】的User對(duì)象", id);            return new UserInfo { ID = id };        }        public static implicit operator UserInfo(string name)        {            Console.WriteLine("獲取用戶名為【{0}】的User對(duì)象", name);            return new UserInfo { Name = name };        }    }

調(diào)用:

            UserInfo user1 = (UserInfo)2;            UserInfo user2 = "bajie";


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 广东省| 岫岩| 屏东市| 台山市| 夹江县| 焉耆| 石家庄市| 枣强县| 灌南县| 厦门市| 广宁县| 伊川县| 抚松县| 辽宁省| 中方县| 樟树市| 宕昌县| 岳阳市| 隆林| 远安县| 佛教| 淳安县| 聊城市| 晋中市| 肥西县| 徐闻县| 伊川县| 大石桥市| 成武县| 娄烦县| 清丰县| 固镇县| 万源市| 青阳县| 叶城县| 建德市| 原平市| 务川| 江孜县| 徐水县| 肃北|