專案中在轉換string到int時,通常交叉使用Convert.ToInt32()
與int.Parse()
。最近遇到一個問題,string如果是null時,才發現這兩者之間有不同的處理方式。
Convert.ToInt32()與int.Parse()的差別
專案中在轉換string到int時,通常交叉使用Convert.ToInt32()
與int.Parse()
。最近遇到一個問題,string如果是null時,才發現這兩者之間有不同的處理方式。所以趕快記錄下來,免得下次又忘了。這次找到的資料是這篇-Convert.ToInt32、(int)和int.Parse三者的区别
先說結論,我的問題是來自於這兩個method對於null的處理。Convert.ToInt32(null)
會回傳0,並不會產生Exception。而int.Parse(null)
則會產生Exception。
Convert.ToInt32()
Convert.ToInt32()有多個Overload method,所以可以處理各種型別的物件。處理到null
會回傳0
,並不會產生Exception。同時,如果有小數點後一位的話,會以4捨6入來處理整數的轉換(如果是5則回傳偶數的整數)。
//回傳0
Console.WriteLine(Convert.ToInt32(null));
//回傳2
Console.WriteLine(Convert.ToInt32(1.5));
//回傳2
Console.WriteLine(Convert.ToInt32(2.5));
//回傳4
Console.WriteLine(Convert.ToInt32(3.5));
//回傳4
Console.WriteLine(Convert.ToInt32(4.5));
int.Parse()
int.Parse()處理對象的是整數,所以遇到null時,會發生ArgumentNullException
。如果數字字串為非整數,例如4.5
,則會發生FormatException
。所以這個method處理能力比較低,只能是string物件,且string資料要正確,不能為null,也不能為非整數。所以通常會使用int.TryParse()以確認是否轉換成功,若回傳false
,則需要有額外的邏輯去處理它。