首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# as 與 is 運算子差異與效能比較:型別轉換最佳實踐

     編輯:關於C#

快速對照表

特性asis
轉換失敗結果回傳 null回傳 false
適用轉換類型參考轉換、裝箱轉換型別相容性檢查 (含值型別)
需額外轉換碼否 (直接得強型別)是 (需再寫一次 cast)
null 輸入行為回傳 null回傳 false
使用者定義轉換不支援不支援

語法範例

as 運算子


Class2 obj2 = obj1 as Class2;
if (obj2 != null)
    Console.WriteLine("轉換成功");
else
    Console.WriteLine("轉換失敗,obj2 為 null");

限制:as 僅能用於參考型別或可為 null 的值型別 (int?),不可用於非可為 null 的值型別 (如 int)。

is 運算子


if (obj1 is Class2 obj2) // C# 7+ 型別模式,直接宣告變數
{
    Console.WriteLine($"轉換成功: {obj2}");
}
else
{
    Console.WriteLine("型別不相容");
}

舊版寫法需二次轉換:


if (obj1 is Class2)
{
    Class2 obj2 = (Class2)obj1; // 第二次型別檢查
}

效能分析:as 勝出

  • is (舊寫法):**兩次型別檢查** (一次 is,一次 cast)。
  • as:**一次型別檢查 + 一次 null 檢查**;null 檢查極廉價 (單指令)。
  • is (C# 7+ 型別模式):**單次檢查並宣告變數**,效能與 as 相當,且語法更優雅。

建議:C# 7+ 專案優先使用 is Type var 型別模式;舊版專案使用 as 後接 null 判斷,避免雙重轉換開銷。

適用場景選擇指南

  1. 預期轉換經常失敗:用 as / is 避免例外拋出開銷。
  2. 轉換應該總是成功 (違反即為 Bug):直接用 (Type)obj 強制轉換,失敗拋出 InvalidCastException 利於除錯。
  3. 值型別轉換:as 不支援,需用 is 或 try-cast。
  4. 介面轉換:as 適用,常見於 obj as IDisposable。

總結

as 與 is 皆為安全型別檢查工具,as 適合「取得強型別參考或 null」,is 適合「判斷型別相容」。現代 C# (7.0+) 以 is Type var 統一兩者優點,建議優先採用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved