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

Effective C# 原則 3:優先用 is/as 而非強制轉型(一)

     編輯:關於C語言

型別轉型的三種選擇

C# 是強型別語言,運行時型別檢查不可避免。面對 object 向下轉型,有三種寫法:

  1. as 運算子:安全轉型,失敗回傳 null
  2. is 運算子:型別檢查,回傳 bool
  3. 強制轉型:C 風格 (T)o,失敗拋 InvalidCastException

正確選擇:as 運算子

// ✅ 推薦:as + null 檢查
object o = Factory.GetObject();
MyType t = o as MyType;
if (t != null)
{
    t.DoWork();
}
else
{
    LogConversionFailure();
}

優點:

  • 無例外開銷,失敗只回傳 null
  • 程式碼簡潔,無 try/catch 嵌套
  • 語意明確:轉型可能失敗,我處理失敗情況

強制轉型的缺點

// ❌ 不推薦:強制轉型 + try/catch
try
{
    MyType t = (MyType)o;
    if (t != null) { t.DoWork(); }
    else { LogNullReference(); }
}
catch (InvalidCastException)
{
    LogConversionFailure();
}

缺點:

  • 例外處理效能極差(正常路徑也較慢)
  • 程式碼冗長,易混淆「來源為 null」與「型別不符」兩種失敗
  • 使用者定義轉型運算子會被意外觸發(見第 3 部分)

as/is 的限制

  • 僅支援參考型別轉換、拆箱轉換、可為 null 的值型別
  • 忽略使用者定義的 implicit/explicit operator
  • 不支援數值型別間轉換(int → long 等)

核心原則

除非有明確理由(使用者定義轉型、數值轉換、值型別拆箱),否則一律使用 as 運算子進行參考型別轉型。

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