C#中数据类型的安全转换(is,as)
生活随笔
收集整理的這篇文章主要介紹了
C#中数据类型的安全转换(is,as)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文?C#中數據類型的安全轉換(is,as)
下面代碼中,不能裝箱,在強制類型轉換時出錯,因為之前 c 是 class 類型,而卻要把它轉換為 int 類型,這是不可以的。雖然編譯器能通過編譯,但是 runtime 在運行時會拋出?InvalidCastException 異常。
?
| 1 2 3 4 | Circle c =?new?Circle(8);? object?o = c;???// 本條語句正確,但是不會裝箱,因為裝箱是從棧到堆,需要的是值類型,而 c 是引用類型? int?i = (int)o;?// 編譯成功?? ????????????????// 編譯器編譯通過,但是運行時 runtime 會拋出一個 InvalidCastException? |
?
??is 和 as 是 C# 提供的以安全的方式執行類型強制轉換的操作符,用法如下。
? ? ? ??is?操作符驗證對象的類型是不是自己希望的。
?
| 1 2 3 4 5 6 | WrappedInt wi =?new?WrappedInt();? object?o = wi;? if?(o?is?WrappedInt)? {? ????WrappedInt temp = (WrappedInt)o;????// 轉型是安全的,o 已確定是一個 WrappedInt? }? |
?
? as?操作符取一個對象和一個類型作為其左邊和右邊的操作數。
runtime 會嘗試將對象轉換成指定的類型,若轉換成功,就返回轉換成功后的結果給 temp,如果轉換失敗,返回?null?給 temp。
?
| 1 2 3 4 5 6 7 | WrappedInt wi =?new?WrappedInt();? object?o = wi;? WrappedInt temp = o?as?WrappedInt;????// 轉型是安全的,o 已確定是一個 WrappedInt? if?(temp !=?null)? {? ????// 只有轉換成功,這里的代碼才能被執行? }? |
?
沒有整理與歸納的知識,一文不值!高度概括與梳理的知識,才是自己真正的知識與技能。 永遠不要讓自己的自由、好奇、充滿創造力的想法被現實的框架所束縛,讓創造力自由成長吧! 多花時間,關心他(她)人,正如別人所關心你的。理想的騰飛與實現,沒有別人的支持與幫助,是萬萬不能的。本文轉自wenglabs博客園博客,原文鏈接:https://yq.aliyun.com/articles/new?spm=a2c4e.11155435.0.0.59a67bf7BTU06l,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的C#中数据类型的安全转换(is,as)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ STL 常用查找算法
- 下一篇: c# char unsigned_dll