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

.NET 四大類型轉換方式深度解析與避坑指南

     編輯:關於.NET

四種轉換方式對比

方式語法適用場景關鍵特性
強制轉型(int)val數值型別間轉換、拆箱截斷小數、null 拋異常、char 轉 ASCII 碼
Parseint.Parse(str)字串轉數值null/空串拋異常、僅支援字串輸入
Convert.ToXxxConvert.ToInt32(val)通用型別轉換null 回 0、空串拋異常、四捨五入、char 轉 ASCII
TryParseint.TryParse(str, out val)高效能安全轉換不拋異常、回傳 bool 表示成敗、.NET 2.0+

詳細行為差異

強制轉型 (int)

  • 浮點數**無條件捨去** (Truncate),非四捨五入
  • object 為 null 時拋 NullReferenceException
  • 某些情況下 object 轉 int 不穩定
  • 嚴禁用於 char:(int)'9' 得 57 (ASCII),非 9

Parse 系列

  • 僅接受 string 參數
  • null 或 string.Empty 均拋 ArgumentNullException/FormatException
  • 各數值型別皆有靜態 Parse

Convert.ToXxx 系列

  • 支援所有基礎型別、null 安全 (回預設值 0/false)
  • 陷阱:string.Empty 轉數值仍拋異常
  • 浮點數**四捨五入** (Banker's Rounding)
  • 嚴禁用於 char:同強制轉型,回 ASCII 碼

TryParse (推薦)

  • .NET 2.0 引入,效能最佳 (無異常開銷)
  • 語義明確:bool success = int.TryParse(s, out int v);
  • 適用高頻率、可能失敗的轉換場景

實測程式碼範本

char c1 = '0', c2 = '9';
string sNull = null, s9 = "9", sEmpty = "";
int i1 = 0, i2 = 9;
double d1 = 1.2345, d2 = 1.5678;
object oNull = null, o9 = 9;

Console.WriteLine($"Cast: {(int)d1}, {(int)d2}");           // 1, 1 (截斷)
Console.WriteLine($"Parse: {int.Parse(s9)}");               // 9
Console.WriteLine($"Convert: {Convert.ToInt32(d1)}, {Convert.ToInt32(d2)}"); // 1, 2 (四捨五入)
Console.WriteLine($"TryParse: {int.TryParse(sEmpty, out _)}"); // False

金融/精度敏感系統建議

  1. 優先使用 TryParse 避免異常流控制
  2. 金額計算用 decimal,避免浮點誤差
  3. 明確業務規則:截斷 vs 四捨五入,統一使用 Math.Truncate/Math.Round
  4. 拒絕隱式轉換,所有邊界輸入显式驗證
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved