Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

C# 類型轉換核心差異:(int) 強制轉換 vs Convert.ToInt32 完整解析

編輯:Linux 教學

前言

C# 開發中將字串或其他類型轉為 int 時,常見 (int) 與 Convert.ToInt32() 兩種寫法。二者本質不同,適用場景與行為差異巨大。本文從類型系統、轉換語義、溢位處理、效能四大維度深度對比,助你精準選型。

一、 核心結論先行

維度(int) 強制轉換Convert.ToInt32() 內容轉換
本質 編譯期類型轉換(數值型之間) 執行期內容解析(任意物件 → Int32)
適用類型 僅限數值型(long, double, short, byte 等) 支援任意型別(string, object, DateTime, bool 等)
字串轉換 編譯錯誤(string 與 int 不相容) 正確解析 數值字串
溢位行為 截斷高位(靜默錯誤,結果錯誤) 拋出 OverflowException
null 處理 不適用 回傳 0(針對 null 參考)
效能 極高(單指令) 較低(含格式解析、檢查邏輯)

二、 詳細場景分析

1. 數值型之間轉換

double d = 3.14;
int i1 = (int)d;           // 3,截斷小數
int i2 = Convert.ToInt32(d); // 3,銀行家四捨五入(MidpointRounding.ToEven)

long big = int.MaxValue + 100L;
int i3 = (int)big;           // -2147483548(溢位截斷,極其危險)
int i4 = Convert.ToInt32(big); // 拋出 OverflowException(安全)

2. 字串轉換(最常見誤區)

string s = "1412";
// int id = (int)s;          // ❌ 編譯錯誤 CS0030:無法將 string 轉換為 int
int id = Convert.ToInt32(s); // ✅ 1412
int id2 = int.Parse(s);      // ✅ 1412,僅限字串,效能略優
int id3 = int.TryParse(s, out var v); // ✅ 推薦:無例外、高效能、可判斷成功

3. 物件與其他類型

object obj = "42";
int v1 = Convert.ToInt32(obj);   // 42
// int v2 = (int)obj;            // ❌ 編譯錯誤(需先 unbox 為 int 型別)

DateTime dt = DateTime.Now;
// int v3 = Convert.ToInt32(dt);  // ❌ 拋出 InvalidCastException(不支援)
bool flag = true;
int v4 = Convert.ToInt32(flag);  // 1

三、 進階:Int32.Parse vs TryParse vs Convert

方法適用場景例外行為效能推薦度
int.Parse(s) 確定字串合法、追求極致效能 FormatException / ArgumentNullException 最高 ⭐⭐⭐⭐
int.TryParse(s, out v) 不確定輸入、高頻呼叫、避免例外開銷 無(回傳 bool) 高 ⭐⭐⭐⭐⭐ 首選
Convert.ToInt32(s) 通用物件轉換、需 null 回傳 0 語義 FormatException / OverflowException 中 ⭐⭐⭐

四、 最佳實踐原則

  1. 字串轉 int:優先 int.TryParse(),次選 int.Parse(),避免 Convert 額外開銷。
  2. 數值縮小轉換:嚴禁 直接用 (int),必須用 Convert.ToInt32() 或手動檢查範圍後再轉。
  3. 物件盒裝值:先 unbox 到確切數值型別,再用 (int) 或 Convert。
  4. 資料庫讀取:reader.GetInt32() 或 Convert.ToInt32(reader["col"]) 處理 DBNull。

結語

(int) 是「型別斷言」,Convert.ToInt32() 是「內容解釋」。混淆二者是導致生產環境隱性 Bug 的高頻原因。牢記:字串只能 Parse/TryParse/Convert,數值縮小必須 Convert/檢查,效能敏感首選 TryParse。

Copyright © Windows教程網 All Rights Reserved