精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C#中 As 和強制轉換的總結

開發 后端
本文主要介紹C#中As和強制轉換,通過例子,為大家詳細介紹,從而得出結論。希望對大家有幫助,一起來看吧!

C#是一門強類型語言,一般情況下,我們***避免將一個類型強制轉換為其他類型,但有些時候難免要進行類型轉換。先想想究竟哪些操作可以進行類型轉換(先不考慮.NET提供的Parse),一般我們都有以下選擇:

  • 使用as操作符轉換,
  • 使用傳統C風格的強制轉型,
  • 使用is來做一個轉換測試,然后再使用as操作符或者強制轉換。

正確的選擇應該是盡可能地使用as操作符,因為它比強制轉型要安全,而且在運行時層面也有比較好的效率(注意的是as和is操作符都不執行任何用戶自定義的轉換,只有當運行時類型與目標轉換類型匹配時,它們才會轉換成功)。

現在我們通過一個簡單的例子說明as和強制轉換之間的區別,首先我們定義一間獲取不同類型對象的工廠,然后我們把未知類型轉換為自定義類型。

  1. object o = Factory.GetObject();   
  2. MyType t = o as MyType;   
  3. if (t == null) { //轉換成功 }   
  4. else { //轉換失敗 }   
  5. object o = Factory.GetObject();   
  6. try { MyType t = o as MyType;   
  7. if (t != null)   
  8. ////轉換成功   
  9. }   
  10. else   
  11. {   
  12. ////轉換失敗   
  13. }   
  14. }   
  15. catch   
  16. ////異常處理  
  17.  } 

通過上述代碼我們發現as類型轉換失敗時值為null不拋出異常,但強制轉換如果轉換失敗會拋出異常所以我們要添加異常處理。

現在我們對as和強制轉換有了初步的了解,假設現在我們定義了一個抽象類Foo,然后Foo1繼承于它,并且再定義一個基類Logger,在Foo1中定義與Logger類型隱式轉換具體如下:

  1. Foo1 myFoo;  
  2. //// Inherits abstract class. Logger myFoo;   
  3. //// base class. public class Foo1 : Foo { PRivate Logger _value;   
  4. /// <summary>   
  5. /// 隱式自定義類型轉換。   
  6. /// </summary>   
  7. /// <param name="foo1"></param>   
  8. /// <returns></returns>   
  9. public static implicit Operator Logger(Foo1 foo1) { return foo1._value;   
  10. }   

現在我們猜猜看以下的類型轉換是否成功(提示:從編譯和運行時類型轉換角度考慮)。

  1. object myFoo = container.Resolve<Foo>();   
  2. //獲取未Foo1類型   
  3. try { Logger myFoo1 = (Logger)myFoo;   
  4. if (myFoo1 != null)   
  5. {   
  6. Console.WriteLine("Covert successful.");   
  7. }   
  8. }   
  9. catch   
  10. {   
  11. Console.WriteLine("Covert failed.");   

相信聰明的大家已經想出答案了,激動人心的時刻到了現在讓我們公布答案:轉換失敗拋出異常。

首先我們要從編譯和運行時角度來分析,在編譯時myFoo的類型為System.Object,這時編譯器會檢測是否存在自定義由Object到Logger的類型轉換。如果沒有找到合適轉換,編譯器將生成代碼檢測myFoo的運行時類型和Logger比較,由于myFoo的運行時類型為Foo1,而且我們自定義了由Foo1到Logger的類型轉換,估計這樣可以轉換成功了吧!然而恰恰沒有轉換成功,這究竟是什么原因呢?讓我們了解一下編譯器對于隱式類型轉換的原理吧。

通過我們發現用戶自定義的轉換操作符只作用于對象的編譯時類型,而非運行時類型上,OK現在讓修改一下代碼讓我們編譯器認識自定義類型中。

 

  1. using (IUnityContainer container = new UnityContainer()) 
  2. { UnityConfigurationSection 
  3. section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");   
  4. //獲取container名稱為CfgClass下的配置   
  5. section.Containers["CfgClass"].Configure(container);   
  6. object tempFoo = container.Resolve<Foo>();   
  7. //獲取未Foo1類型   
  8. Foo1 myFoo = tempFoo as Foo1;   
  9. //使用as先把object轉型為Foo1   
  10. try { Logger myFoo1 = (Logger)myFoo;   
  11. if (myFoo1 != null) {   
  12. Console.WriteLine("Covert successful.");   
  13. }   
  14. }   
  15. catch {  
  16. Console.WriteLine("Covert failed.");   
  17. }   
  18. Console.ReadKey();   

 

現在類型可以轉換成功,這是因為編譯器使用了我們自定義的隱式轉換,由于myFoo這次的編譯類型為Foo1,編譯器首先查找是否存在Foo1和Logger自定義轉換類型,由于我們定義了一種由Foo1到Logger的隱式類型轉換所以轉換成功。

通過上述我們發現了as給我們帶來的好處,但是有一點我們要注意的是as只能用于引用類型不能用于值類型。那我就有個問題了在進行類型轉換之前如果我們并不知道要轉換的是值類型還是引用類型,那該怎么辦呢?現在是is登場的時候了。

 

  1. bject tempFoo = container.Resolve<Foo>(); //獲取未Foo1類型   
  2. int myInt = tempFoo as int//compile error 

as不能用于值類型,這是因為值類型不能為null(注意:C#2.0中,微軟提供了Nullable類型,允許用它定義包含null值,即空值的數據類型)像這種情況我們應該使用強制類型轉換。

  1. object tempFoo = container.Resolve<Foo>();   
  2. //獲取未Foo1類型   
  3. try { int myInt = (int)tempFoo;   
  4. //轉換成功   
  5. if (myFoo1 != null)   
  6. {   
  7. Console.WriteLine("Covert successful.");   
  8. }   
  9. }   
  10. catch   
  11. { Console.WriteLine("Covert failed.");   

大家可以發現和我們之前使用的強制轉換類似,而且還有處理異常,現在修改一下我們代碼讓它更加簡潔實現如下:

  1. object tempFoo = container.Resolve<Foo>();   
  2. //獲取未Foo1類型int i = 0;   
  3. //值類型轉換  
  4. if (tempFoo is int){ i = (int) tempFoo;}  
  5. object tempFoo = container.Resolve<Foo>();   
  6. //獲取未Foo1類型  
  7. Logger myFoo1 = null;   
  8. //引用類型轉換  
  9. if (tempFoo is Logger)  
  10. {   
  11. myFoo1 = tempFoo as Logger;  

總結

as和強制轉換之間***的區別就在于如何處理用戶自定義的轉換。操作符 as和 is 都只檢查被轉換對象的運行時類型,并不執行其他的操作。如果被轉換對象的運行時類型既不是所轉換的目標類型,也不是其派生類型,那么轉型將告失敗。但是強制轉型則會使用轉換操作符來執行轉型操作,這包括任何內建的數值轉換(如:long轉int)。

一般情況我們應該先考慮使用as進行類型轉換,然后再考慮使用is,***才考慮使用強制轉換。

【編輯推薦】

  1. c#.net實體類序列化方法
  2. C#中log4net使用方法(一)
  3. C#中log4Net使用方法(二)
  4. 淺析C#插件式程序開發經驗
  5. 談C#中循環結構的效率問題
責任編輯:于鐵 來源: 博客園
相關推薦

2009-08-24 14:20:13

C# 強制類型轉換

2011-06-08 13:50:39

C#類型轉換

2009-09-02 14:14:44

C# COM接口轉換

2009-08-21 09:57:08

C#操作符IS與AS

2009-08-20 18:06:18

學習C#接口

2009-08-18 15:00:00

C#強制轉換

2011-07-14 10:39:08

強制類型轉換函數C++

2010-01-28 14:38:36

C++和C#、Java

2023-01-17 14:01:19

JavaScript類型轉換字符串

2024-03-19 14:41:08

C#操作符開發

2009-08-27 11:21:36

C# override

2009-08-12 18:28:49

C#強制類型轉化

2009-08-24 09:55:26

C#接口轉換

2009-08-03 18:35:02

Boxing和UnboC#

2024-05-30 12:24:03

C#開發

2024-10-05 00:00:35

Action?C#Func?

2009-08-13 18:21:52

C#學習筆記

2009-08-17 17:04:29

C#轉義字符

2009-08-13 18:02:50

C#基礎概念

2009-08-11 15:44:05

C#基本技巧
點贊
收藏

51CTO技術棧公眾號

国产三级在线看| 久久精品久久精品久久| 日韩专区视频| 一区二区三区四区蜜桃| 国产日韩精品久久| 中国黄色一级视频| 欧美日本一区| 亚洲精品自拍偷拍| 日日干日日操日日射| gogo高清在线播放免费| 欧美激情中文字幕一区二区| 91中文字精品一区二区| 国产视频1区2区| 欧美日韩亚洲三区| 中文字幕欧美在线| 少妇精品无码一区二区三区| 欧美成人黄色| 精品国产91久久久久久老师| 国产又大又长又粗又黄| 日本一区二区三区在线观看视频| 精品亚洲国内自在自线福利| 欧美一区二区色| 波多野结衣亚洲色图| 国产一区不卡| 国产视频自拍一区| 又色又爽又黄18网站| 久久女人天堂| 在线观看免费一区| 激情五月宗合网| 1024在线播放| 亚洲免费毛片网站| 伊人久久青草| 18视频免费网址在线观看| 99视频精品全部免费在线| 91免费欧美精品| 在线观看国产精品入口男同| 美女精品在线观看| 91精品国产成人| 亚洲国产精品午夜在线观看| 亚洲国产精品91| 日韩在线视频观看| 日本污视频网站| 国内精品视频在线观看| 亚洲欧美综合精品久久成人| 国产草草浮力影院| 大伊香蕉精品在线品播放| 日韩一级完整毛片| 一本之道在线视频| 国产成人免费视频网站视频社区| 欧美性猛交一区二区三区精品| 亚洲熟女乱色一区二区三区| 国产污视频在线播放| 午夜视频一区二区| 成人午夜免费在线| а√天堂资源官网在线资源| 午夜精品一区二区三区免费视频| 久艹在线免费观看| а√天堂中文资源在线bt| 天天色综合成人网| 美女福利视频在线| 原纱央莉成人av片| 欧美综合色免费| 天堂av8在线| 日本伊人久久| 亚洲国产成人精品电影| 久久人妻一区二区| 少妇精品久久久一区二区| 亚洲天堂av综合网| 岛国片在线免费观看| 999久久久国产精品| 欧美精品性视频| www.av视频在线观看| 亚洲一区二区免费看| 日本韩国欧美精品大片卡二| 亚洲精品91天天久久人人| 久久国产精品第一页| yy111111少妇影院日韩夜片| 色婷婷在线视频| 91免费看片在线观看| 日韩精品极品视频在线观看免费| 69视频在线观看| 亚洲精品乱码久久久久久| cao在线观看| 在线精品亚洲欧美日韩国产| 欧美色手机在线观看| 性xxxxxxxxx| 欧美精品系列| 欧美日韩第一视频| 亚洲熟女综合色一区二区三区| 日产国产欧美视频一区精品| 亚洲一区二区三区四区视频| 日韩欧美在线番号| 国产精品灌醉下药二区| 黄色网在线视频| gay欧美网站| 91精品国产欧美一区二区| 亚洲第九十七页| 91久久高清国语自产拍| 2019中文在线观看| aaaa一级片| 久久久99精品久久| 欧美交换配乱吟粗大25p| 快播电影网址老女人久久| 日韩精品中文字幕一区二区三区| 69视频在线观看免费| 欧美日韩一区自拍 | 自拍在线观看| 欧美一区二区精品| 亚洲欧美va天堂人熟伦 | 亚洲天堂精品视频| 日本在线视频www| 97久久超碰| 色多多国产成人永久免费网站| 国产精品成人久久| 国内精品伊人久久久久av影院| 久久久国产精品一区二区三区| 伦xxxx在线| 欧美综合视频在线观看| 国产精品伦子伦| 狠狠色综合网| 91成人理论电影| 在线免费观看黄色网址| 一本色道久久综合亚洲aⅴ蜜桃| 精品人妻二区中文字幕| 91成人国产| 国产精品一区电影| 精品亚洲成a人片在线观看| 亚洲国产精品一区二区久久恐怖片| 天天色综合社区| 国产毛片一区二区三区 | 91精品视频一区二区| 国产小视频国产精品| 台湾佬中文在线| 91蝌蚪porny| 欧美亚洲一二三区| 精品国产午夜肉伦伦影院| 欧美激情视频一区| 亚洲精品国产精品国| 一区二区三区蜜桃网| 日本一二三四区视频| 99re66热这里只有精品8| 国产精品一区二区三区毛片淫片| 98在线视频| 欧美日韩精品一区二区三区蜜桃| 精品成人无码一区二区三区| 玖玖在线精品| 美美哒免费高清在线观看视频一区二区| 亚洲最大的网站| 婷婷色在线播放| 日韩欧美你懂的| 久久国产精品波多野结衣av| 国产iv一区二区三区| h无码动漫在线观看| 岛国av一区| 91精品国产高清久久久久久久久| 欧美一级特黄aaaaaa| 午夜精品久久久久久久久久久| 人妻激情偷乱频一区二区三区| 欧美日韩亚洲三区| 久久精品美女| 日本精品在线一区| 久久天天躁夜夜躁狠狠躁2022| 99久久久国产精品无码网爆| 一区二区高清视频在线观看| 欧美激情 亚洲| 国产精品美女久久久浪潮软件| 亚洲精品xxxx| 女性女同性aⅴ免费观女性恋| 国产精品宾馆| 欧美最顶级的aⅴ艳星| 国产二区视频在线观看| 91.麻豆视频| 精品无码久久久久久久| av成人老司机| 日本成人黄色网| 国产精品99久久精品| 999日本视频| 国产夫妻在线| 在线一区二区日韩| 精品人妻无码一区二区色欲产成人| 亚洲在线视频网站| 亚洲国产av一区| 久久国产生活片100| 激情五月六月婷婷| 亚洲日本三级| 51国偷自产一区二区三区的来源| 色多多在线观看| 手机精品视频在线观看| 国产女人水真多18毛片18精品 | 欧美成人二区| 日韩精品一区在线观看| 久久久久99精品成人片我成大片 | 六九午夜精品视频| 欧美精品久久久久久久| 国产天堂在线| 精品国产3级a| 在线观看色网站| 偷偷要91色婷婷| 老司机福利在线观看| 成人免费毛片高清视频| 亚洲一级免费观看| 亚洲性感美女99在线| 欧美放荡的少妇| 激情婷婷综合网| 国产一区不卡| 成人精品一区二区三区| 亚洲精品福利电影| 色综合久久久888| seseavlu视频在线| 日韩精品在线私人| 午夜精品久久久久久久爽| 欧亚洲嫩模精品一区三区| 国产精品theporn动漫| 国产精品久久久久久亚洲毛片 | 黄色av免费在线播放| 亚洲午夜黄色| 黄黄视频在线观看| 日韩伦理一区| 蜜桃网站成人| 欧美大胆视频| www.久久爱.cn| 国产精品18| 肉肉av福利一精品导航| 日韩精品一区二区三区丰满| 给我免费播放日韩视频| 亚洲一区二区三区xxx视频| 日本一区二区三区视频在线| 97视频在线观看网址| 日本动漫同人动漫在线观看| 精品国产一区久久久| 91在线导航| 国产亚洲成av人片在线观看桃| 天堂av中文在线资源库| 亚洲成人亚洲激情| 亚洲国产精品suv| 日韩一二三四区| 国产精品无码免费播放| 欧美乱妇20p| 国产精品久久久久久久久毛片 | 久久涩涩网站| 国产精品极品| 国产高清不卡av| av综合网址| 国产日韩久久| 欧美三级自拍| 免费日韩av电影| 九九免费精品视频在线观看| 日本不卡一区二区三区在线观看| 亚洲午夜久久| 日韩国产精品一区二区三区| 国产尤物久久久| 亚洲亚洲精品三区日韩精品在线视频| 国产精品一区二区99| 日韩亚洲欧美精品| 久久一本综合| 欧美一级特黄aaaaaa在线看片| 午夜久久tv| 国产性生活免费视频| 亚洲一级影院| 国产淫片av片久久久久久| 懂色aⅴ精品一区二区三区| 亚洲午夜视频在线| 中国女人特级毛片| 国产精品视频一二| 男人的午夜天堂| 亚洲另类中文字| 精品在线免费观看视频| 精品久久久久久国产91| 男操女视频网站| 91精品国产一区二区三区香蕉| 亚洲风情第一页| 国产午夜精品麻豆| 国产在线高清理伦片a| 欧美激情日韩图片| 视频在线日韩| 91在线看网站| 免费看日本一区二区| 五月天男人天堂| 亚洲另类视频| 天天色综合社区| 不卡一区在线观看| 亚洲一区 欧美| 亚洲国产精品久久一线不卡| 精品不卡一区二区| 91精品国产综合久久久久| 亚洲狠狠婷婷综合久久久| 免费欧美一区| 久久www视频| 三级精品在线观看| 在线观看你懂的视频| 久久综合久久99| 四虎永久免费在线| 欧美日韩在线视频首页| 91精品国产乱码久久久| 日韩av网站电影| 黄色大片在线播放| 欧美中文字幕在线视频| 成人51免费| 欧美一区免费视频| 激情久久久久久| 爱豆国产剧免费观看大全剧苏畅| 99精品国产91久久久久久 | 欧美色图另类| 久久国产精品免费视频| 偷拍视频一区二区三区| 国产精品swag| 亚洲色图国产| 五月婷婷丁香综合网| 三级成人黄色影院| 亚洲天堂色网站| 成人超碰在线| 91亚洲精品久久久| 日韩成人免费| 免费在线观看毛片网站| 成人综合在线观看| 99久久婷婷国产综合| 欧美亚洲图片小说| 黄色片在线免费看| 欧美中文在线免费| 欧美三级自拍| 国产真人做爰毛片视频直播| 国产乱对白刺激视频不卡| 国产视频不卡在线| 一本大道久久a久久综合婷婷| 欧美熟妇乱码在线一区| 欧美精品在线看| 91丨精品丨国产| 一本色道久久综合亚洲精品婷婷 | 精品欧美色视频网站在线观看| 欧美男人的天堂一二区| www.黄色在线| 欧美日韩一区二区精品| 天堂国产一区二区三区| 欧美激情中文字幕在线| 久久综合给合| 在线观看污视频| 国产精品乡下勾搭老头1| 天天色天天综合| 欧美精品日韩一本| 岛国成人毛片| 亚洲自拍偷拍一区| 欧美日韩精品| 污污免费在线观看| 五月开心婷婷久久| 亚洲aⅴ乱码精品成人区| 97视频在线观看成人| 午夜精品福利影院| 日韩免费毛片视频| 国产性色一区二区| 中文字幕久久网| 日韩日本欧美亚洲| 国产午夜久久av| 真实国产乱子伦对白视频| 不卡的看片网站| 六月丁香激情综合| 亚洲天堂av在线免费观看| 久久久久久久性潮| 欧美精品videofree1080p| 香蕉视频网站在线| 全亚洲最色的网站在线观看| 国产aⅴ精品一区二区三区久久| 亚洲人辣妹窥探嘘嘘| 中文字幕一区二区三区在线播放 | 亚洲热线99精品视频| 欧美电影网址| 影音先锋亚洲视频| 国产成人精品亚洲午夜麻豆| 国产一卡二卡在线| 亚洲欧美日韩另类| 免费视频观看成人| 免费的一级黄色片| 久久综合狠狠综合久久综合88| 日韩中文字幕高清| 久久福利视频网| 色狼人综合干| 天天干天天av| 午夜视频在线观看一区二区三区| 国产视频二区在线观看| 91久久精品国产91久久| 在线视频精品| 国产91在线播放九色| 精品免费一区二区三区| 香蕉视频亚洲一级| 综合网中文字幕| 青青草在线免费视频| 欧美在线免费看| 天天做天天爱天天综合网2021| 在线精品视频播放| 在线观看av不卡| 美女网站视频在线| 亚洲春色在线视频| av不卡免费在线观看| 91tv国产成人福利| 欧美亚洲成人精品| 88国产精品视频一区二区三区| free性中国hd国语露脸| 91精品国产乱码久久蜜臀| 一区二区三区电影大全| 日韩欧美一级在线| 欧美韩国日本不卡|