欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何理解C#可空值類型

如何理解C#可空值類型,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)建站專注于賀蘭企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城建設(shè)。賀蘭網(wǎng)站建設(shè)公司,為賀蘭等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

通常一個值類型變量永遠(yuǎn)不可能為null,它總是包含值類型的值本身。但是在某些情況下會遇到一些問題如:在映射數(shù)據(jù)庫中的一個C#可空值列時,使用Framework來處理數(shù)據(jù)庫數(shù)據(jù)時變得相當(dāng)困難;為了解決這一問題CLR中引入了“C#可空值類型(nullable value type)”

為理解它們是如何工作的,先看看CLR中的邏輯:

[Serializable, StructLayout(LayoutKind.Sequential)]      public struct Nullable< T> where T : struct     {          private Boolean hasValue = false; // 用一個字段落表示裝態(tài),初始假定為Null          internal T value = default(T);          public Nullable(T value)          {              this.value = value;              this.hasValue = true;          }              public bool HasValue { get { return hasValue; } }          public T Value          {              get             {                  if (!hasValue) throw new InvalidOperationException("Nullable object must have a value.");                  return value;              }          }              public T GetValueOrDefault() { return value; }          public T GetValueOrDefault(T defaultValue)          {              if (!HasValue) return defaultValue;              return value;          }          public override bool Equals(object obj)          {              if (!HasValue) return (obj == null);              if (obj == null) return false;              return value.Equals(obj);          }              public override int GetHashCode()          {              if (!HasValue) return 0;              return value.GetHashCode();          }          public override string ToString()          {              if (!HasValue) return String.Empty;              return value.ToString();          }              public static implicit operator Nullable< T>(T value)          {              return new Nullable< T>(value);              }          }

調(diào)用和輸出:

   static void Main(string[] args)             {                 Nullable< Int32> x = 5;                 Nullable< Int32> y = null;                 Console.WriteLine("x:HasValue {0}, value = {1}", x.HasValue, x.Value);                 Console.WriteLine("y:HasValue {0}, value = {1}", y.HasValue, y.GetValueOrDefault());                 Console.ReadLine();             }     輸出:         x:HasValue  True, value = 5         y:HasValue False, value = 0

C#中允許使用問號來申明初始化變量(等同于上面代碼)如:

Int32? x = 5;

Int32? y = null;

總結(jié)一下C#可空值類型對操作符的解釋:

a.一元操作符如果操作數(shù)為null,結(jié)果為null;

b.二元操作符中任何一個為null,結(jié)果為null;

c.比較操作符如果兩人個操作數(shù)都為null,兩者相等;如果一個為null,兩者不相等;如果兩個數(shù)都不為null,對值進(jìn)行比較;

注意:在操作值類型時會生成大量代碼,代碼類似對基類(Nullable)代碼的調(diào)用;

//一元操作符:(+ ++ - -- ! ~)     x++; // x = 6;     y--; // y = null;     //二元操作符:(+ - * / % & | ^ < <  >>)     x = x + 10; // x = 15;     y = y * 10; // y = null     // 比較操作符:(== != <  > < = >=)     if (x == null) Console.WriteLine("x is null;"); else Console.WriteLine("x is not null;");     if (y == null) Console.WriteLine("y is null;"); else Console.WriteLine("y is not null;");     if (x != y) Console.WriteLine("x = y;"); else Console.WriteLine("x != y;");     if (x > y) Console.WriteLine("x > y;"); else Console.WriteLine("x < = y;");

當(dāng)CLR對一個Nullable< T>實(shí)例進(jìn)行裝箱時,會檢查它是否為null,如果為null,CLR不實(shí)際進(jìn)行裝箱操作,并會返回null值;

如果實(shí)例不為空,將從類型中取出值,并對其進(jìn)行裝箱如:

Int32? a = null;                 object o = a; //a 為null                 Console.WriteLine(" o is null = {0}", o == null); // "true"                     Int32? b = 5;                 o = b; //a 為null                 Console.WriteLine(" o's type = {0}", o.GetType()); // "System.Int32" 對可空值類型調(diào)用GetType時CLR會采取欺騙手法返回T,而不是Nullable< T>

在應(yīng)用可空值類型進(jìn)行拆箱時,CLR會分配內(nèi)存(這是一個極特殊的行為,在其它所有情況下,拆箱永遠(yuǎn)不會導(dǎo)致內(nèi)存的分配),原因在于一個已裝箱的值類型不能簡單的拆箱為值類型的可空版本,在已裝箱的值類型中并不包含Boolean hasValue字段,故在拆箱時CLR必須分配一個Nullable< T>對象,已初始化hasValue = true ,value = 值類型值。這會對應(yīng)用程序性能造成一定影響。

通過C#可空值類型調(diào)用接口方法

Int32? n = 5;             Int32 result = ((IComparable)n).CompareTo(5);             Console.WriteLine(result); // 0;

關(guān)于如何理解C#可空值類型問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

新聞名稱:如何理解C#可空值類型
當(dāng)前URL:http://www.aaarwkj.com/article38/pjcepp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、微信公眾號、品牌網(wǎng)站設(shè)計(jì)、用戶體驗(yàn)自適應(yīng)網(wǎng)站、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
国产手机在线91精品观看| 夫妻性生活黄色录像视频| 在线观看不卡的黄色地址| 国产黄色一区二区三区四区| 精品嫩模福利一区二区蜜臀| 午夜福利影片免费观看| 激情国产白嫩美女在线观看| 国产黄色片网站在线看| 国产欧美日韩一二三四| 久久久精品国产亚洲av色哟哟| 美女床上激情啪啪网页| 国产一区二区三区自拍| 日本福利一区二区三区| 中文字幕乱码在线观看一区| 亚洲视频一区视频二区| 久久热视频这里有精品| 日本韩国欧美成人精品| 色噜噜人妻av中文字幕| 日本毛茸茸的丰满熟妇| 最新日本免费久久精品| 国产国语久久91老女人| 精品人妻va人妻中文字幕麻豆| 国产原创av超爽剧情系列| 久久精品女人天堂av免费观看| 涩五月婷婷开心中文字幕| 熟女人妻丰满视频中文字幕| 国内精品久久久久久2021| 欧美黑人在线一区二区| 偷窥偷拍原味一区二区三区| 久久中文字幕日韩精品| 一区二区三区国产激情| 精品一二三四五区亚洲乱码| 亚洲欧美激情国产综合久久| 久久精品国产精油按摩| 欧美激情中文字幕日韩精品| 久久精品国产亚洲av麻豆尤物| 熟女人妻精品一二三四| 中文字慕日韩精品欧美一区| 夜夜嗨精品免费视频播放| 丰满熟女人妻中文字幕免费| 久久久久久精品国产免费|