C#中is與as的區別分析

来源:https://www.cnblogs.com/yoga21/archive/2018/04/06/8729275.html
-Advertisement-
Play Games

這篇文章主要介紹了C#中is與as的區別,較為詳細的分析了is與as的原理與特性及用法區別,具有很好的學習借鑒價值,需要的朋友可以參考下 本文實例分析了C#中is與as的區別,分享給大家供大家參考。具體分析如下: 一、C#類型的轉換 在c#中類型的轉換分兩種:顯式和隱式,基本的規則如下: 1、基類對 ...


這篇文章主要介紹了C#中is與as的區別,較為詳細的分析了is與as的原理與特性及用法區別,具有很好的學習借鑒價值,需要的朋友可以參考下

本文實例分析了C#中is與as的區別,分享給大家供大家參考。具體分析如下:

一、C#類型的轉換

在c#中類型的轉換分兩種:顯式和隱式,基本的規則如下:

1、基類對象轉化為子類對象,必須顯式轉換,規則:(類型名) 對象。
2、值類型和引用類型的轉換採用裝箱(boxing)或拆箱(unboxing).
3、子類轉化為基類對象。
4、基本類型互相之間轉化可以用Covent類來實現。
5、字元串類型轉換為對應的基本類型用Parse方法,除了String類型外其他的類型都可以用Parse方法。
6、用GetType可以取得對象的精確類型。
7、子類轉化為基類,採用隱式轉換。

二、C#中的is

檢查一個對象是否相容於其他指定的類型,並返回一個Bool值,如果一個對象是某個類型或是其父類型的話就返回為true,否則的話就會返回為false。永遠不會拋出異常
如果對象引用為null,那麼is操作符總是返回為false,因為沒有對象可以檢查其類型。

例如 

  代碼如下:

  object o = new object();
  if (o is Label)
  {
      Label lb = (Label)o;
      Response.Write("類型轉換成功");
  }
  else
  {
      Response.Write("類型轉換失敗");   
  }

 

三、C#中as的轉換規則

1、檢查對象類型的相容性,並返迴轉換結果,如果不相容則返回null;
2、不會拋出異常;
3、如果結果判斷為空,則強制執行類型轉換將拋出NullReferenceException異常;
4、用as來進行類型轉換的時候,所要轉換的對象類型必須是目標類型或者轉換目標類型的派生類型

例如 

  代碼如下:   object o = new object();    
  Label lb = o as Label;    
  if (lb == null)
  {
      Response.Write("類型轉換失敗");
  }
  else
  {      
      Response.Write("類型轉換成功"); 
  }

 

使用as操作符有如下幾點限制

第一個就是,不用在類型之間進行類型轉化,即如下編寫就會出現編譯錯誤。

 

  代碼如下:   NewType newValue = new NewType();
  NewType1 newValue = newValue as NewType1;

 

第二個就是,不能應用在值類型數據,即不能如下寫(也會出現編譯錯誤)。

 

  代碼如下:   object objTest = 11;
  int nValue = objTest as int;

 

四、as與is的區別

1、AS在轉換的同事兼判斷相容性,如果無法進行轉換,則 as 返回 null(沒有產生新的對象)而不是引發異常。有了AS我想以後就不要再用try-catch來做類型轉換的判斷了。因此as轉換成功要判斷是否為null。

2、AS是引用類型類型的轉換或者裝箱轉換,不能用與值類型的轉換。如果是值類型只能結合is來強制轉換
3、IS只是做類型相容判斷,並不執行真正的類型轉換。返回true或false,不會返回null,對象為null也會返回false。

4、AS模式的效率要比IS模式的高,因為藉助IS進行類型轉換的化,需要執行兩次類型相容檢查。而AS只需要做一次類型相容,一次null檢查,null檢查要比類型相容檢查快。

五、在進行類型轉換的時候,可以按照如下的方式進行選擇

1、Object => 已知引用類型
使用as操作符來完成

2、Object => 已知值類型
先使用is操作符來進行判斷,再用類型強轉方式進行轉換

3、已知引用類型之間轉換
首先需要相應類型提供轉換函數,再用類型強轉方式進行轉換

4、已知值類型之間轉換
最好使用系統提供的Convert類所涉及的靜態方法

六、(int)和Int32.Parse(),Convert.ToInt32()三者的區別

1、(int)轉換:用在數值範圍大的類型轉換成數值範圍小的類型時使用,但是如果被轉換的數值大於或者小於數值範圍,則得到一個錯誤的結果,利用這種轉換方式不能將string轉換成int,會報錯。

2、Int32.Parse()轉換:在符合數字格式的string到int類型轉換過程中使用,並可以對錯誤的string數字格式的拋出相應的異常。

3、Convert.ToInt32()轉換:使用這種轉換,所提供的字元串必須是數值的有效表達方式,該數還必須不是溢出的數。否則拋出異常。

希望本文所述對大家的C#程式設計有所幫助。

轉載自:http://www.jb51.net/article/56657.htm。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • UWP Community Toolkit 中有一個為圖片或磁貼提供輪播效果的控制項 - RotatorTile,本篇我們結合代碼詳細講解 RotatorTile 的實現。 RotatorTile 提供了一種類似 Windows 10 磁貼的輪播方式,可以輪流播放開發者設置的內容序列,支持設置輪... ...
  • 最近工作業務要是用伺服器證書驗證,在這裡記錄下一. 1.添加伺服器角色 [證書服務] 2.一路下一步直到證書服務安裝完成; 3.選擇圈選中的伺服器證書 4.點擊[創建證書申請] 5.填寫信息 6.下一步,直到保存文件位置 7.搜索證書頒發機構,打開 8.右鍵樹型,選擇[提交一個新的申請] 9.選擇之 ...
  • 主題 賬戶管理一個比較常見的功能就是密碼強度策略,Identity已經內置了一個通用的可配置的策略,我們一般情況下可以直接拿來用即可。本篇我會介紹一些Identity內置的密碼策略類:PasswordValidator,並且簡單介紹一下源碼。最好我們還會自定義一個密碼策略類的實現。https://w ...
  • sing System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{ class Program { static void Main(stri ...
  • C#情懷與未來,怨天尤人還是抓住機會,能否跟上dnc新時代浪潮? 經常看到有.NET圈子在討論是否應該轉其它語言 C#情懷是一方面,如果覺得C#未來沒前途,光靠情懷是撐不住的, 建議對C#未來沒信心的朋友,轉go、rust、py、TS、JS、java …… 常常看到有人抱怨.NET,抱怨好幾年了,卻 ...
  • using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplicationl { class Program { static void Main ...
  • 本文介紹了 C# 如何使用 GDI+ 為圖片添加文字,並且可以使文字字體大小自適應。 ...
  • c#的三個高級參數ref out 和Params 前言:在我們學習c#基礎的時候,我們會學習到c#的三個高級的參數,分別是out .ref 和Params,在這裡我們來分別的講解一下,在這裡的我們先不做具體的解釋,我會通過幾個例子來做分別的解釋。 一:out參數 1.首先我先給大家一個題:我們來寫一 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...