C# 是強型別語言,運行時型別檢查不可避免。面對 object 向下轉型,有三種寫法:
(T)o,失敗拋 InvalidCastException// ✅ 推薦:as + null 檢查
object o = Factory.GetObject();
MyType t = o as MyType;
if (t != null)
{
t.DoWork();
}
else
{
LogConversionFailure();
}
優點:
// ❌ 不推薦:強制轉型 + try/catch
try
{
MyType t = (MyType)o;
if (t != null) { t.DoWork(); }
else { LogNullReference(); }
}
catch (InvalidCastException)
{
LogConversionFailure();
}
缺點:
implicit/explicit operatorint → long 等)除非有明確理由(使用者定義轉型、數值轉換、值型別拆箱),否則一律使用 as 運算子進行參考型別轉型。