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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...