2010年8月24日 星期二

convert.ToInt32, (int), int.Parse的差別

忽然想知道這三者是否等價,結果查了一下發現有一些細微差別
這篇文章主要從這邊看來
Convert.ToInt32、(int)和int.Parse三者的区别2008-06-26 07:01 P.M.Convert.ToInt32、(int)和int.Parse三者的区别:

結論:
1. convert.toxxx針對物件,碰到null回傳0所以不會失敗,
轉換規則是四捨五入
2. int.parse只能處理字串,碰到null會失敗,要有檢查機制(==null? tyr/catch),
轉換規則:無,所以只能用於整數字串
3. (int)負責轉型,只能針對簡單資料
規則是無條件捨去


Convert.ToInt32、(int)和int.Parse三者的區別:
前者適合將object類類型轉換成int類型,如Convert.ToInt32(session["shuzi"]);
(int)適合簡單資料類型之間的轉換;
int.Parse適合將string類類型轉換成int類型,如int.Parse(session["shuzi"].ToString())。


(1)這兩個方法的最大不同是它們對null值的處理方法:
Convert.ToInt32(null)會返回0而不會產生任何異常,但int.Parse(null)則會產生異常。
沒搞清楚Convert.ToInt32和int.Parse()的細細微區別時千萬別亂用,否則可能會產生無法預料的結果,舉例來說:假如從url中取一個參數page的值,我們知道這個值是一個int,所以即可以用Convert.ToInt32(Request.QueryString["page"]),也可以用,int.Parse(Request.QueryString["page"]),但是如果page這個參數在url中不存在,那麼前者將返回0,0可能是一個有效的值,所以你不知道url中原來根本就沒有這個參數而繼續進行下一下的處理,這就可能產生意想不到的效果,而用後一種辦法的話沒有page這個參數會拋出異常,我們可以捕獲異常然後再做相應的處理,比如提示用戶缺少參數,而不是把參數值當做0來處理。
(2)還有一點區別就是
a. Convert.ToInt32(double value)
如果 value 為兩個整數中間的數位,則返回二者中的偶數;即 3.5轉換為4,4.5 轉換為 4,而 5.5 轉換為 6。 不過4.6可以轉換為5,4.4轉換為4
b. int.Parse("4.5")
直接報錯:"輸入字串的格式不正確".
c. int(4.6) = 4
Int轉化其他數值類型為Int時沒有四捨五入,強制轉換

int.Parse是轉換String為int
Convert.ToInt32是轉換繼承自Object的物件為int的.
你得到一個object物件,你想把它轉換為int,用int.Parse就不可以,要用Convert.ToInt32.

個人總結:
(1)Convert.ToInt32的參數比較多,Int.Parse只能轉換string類型的.
(2)Parse就是把String轉換成int,char,double....等,也就是*.Parse(string) 括弧中的一定要是string.
(3)Convert可以提供多種類型的轉換,也就是Convert.*()括弧中可以為很多種類型(包括string).
(4)至於效率上的區別可以看看這遍文章:《細說Convert和Parse到底那個效率高》

沒有留言: