.NET類型轉型的四種做法:
◆ 強制轉型:(int)變量名稱
◆ int.Parse(字符串變量名稱)
◆ Convert.To類型(變量名稱)
◆ TryParse
強制轉型 (casting)
◆ 浮點數會做無條件捨去,失去精確度
◆ 可處理 object 轉 int,但遇到 object 為 null 時會產生 error
◆ 某些情況下,如 object 轉型成 int,有時正常,但有時會無故發生 error,原因不明
◆ 無法處理 string 轉 int (程序中常會用到的功能)
◆ 千萬不可用來處理 char 類型,否則傳回的是 ASCII 碼,而不是字面上的數字
int.Parse(字符串變量名稱)
◆ 只能處理 string 轉 int 或其它類型,無法處理 string 以外的類型,功能有限
◆ 遇到 string 為 null 或 string.Empty 時,仍會造成程序 error
◆ 亦可變化使用:「類型.Parse(string)」,但參數只能丟 string
Convert.To類型(變量名稱)
◆ 可處理所有 .NET 的類型、功能完整
◆ 可處理 null,幾乎不會因轉型造成程序 error
◆ 透過「Convert.ToInt32(變量)」轉型成 int 時,變數若為 object 或 string 類型,當其值為 null 時,會傳回 0,不會造成程序 error
◆ 續前一點,若此 string 類型的變量,其原始值為 string.Empty,在轉型成 int 時,仍會造成程 序 error
◆ 浮點數會做四捨五入
◆ 千萬不可用來處理 char 類型,否則傳回的是 ASCII 碼,而不是字面上的數字
測試范例:
protected void Page_Load(object sender, EventArgs e) { char i1 = '0'; char i2 = '9'; string i1 = null; string i2 = "9"; string i3 = string.Empty; int i1 = 0; int i2 = 9; double i1 = 1.2345; double i2 = 1.5678; object i1 = null; object i2 = 9; // 浮點數會做無條件捨去,某些情況會無故產生 error Response.Write((int)i1 + ", " + (int)i2 + "<br>"); // 只能處理「字符串」轉型成其它類型,功能有限 Response.Write(int.Parse(i1) + ", " + int.Parse(i2) + "<br>"); // 可處理所有類型及 Null,但浮點數會做四捨五入。推薦使用,但不可處理 char 類型 Response.Write(Convert.ToInt32(i1) + ", " + Convert.ToInt32(i2) + "<br>"); }
遇到要特別注意數字、金額精確度的項目時,應特別注意。
TryParse
這個方法是 .NET Framework 2.0 版的新功能。將數字的字串表示轉換成它的對等32 位元帶正負號 的整數。傳回指示作業是否成功的值。 TryParse 方法與 Parse 方法類似,除了TryParse 方法在轉換失 敗時不會擲回例外狀況以外。