[C#]Convert.ToInt32()與int.Parse()的差別

專案中在轉換stringint時,通常交叉使用Convert.ToInt32()int.Parse()。最近遇到一個問題,string如果是null時,才發現這兩者之間有不同的處理方式。

Convert.ToInt32()與int.Parse()的差別

專案中在轉換stringint時,通常交叉使用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,則需要有額外的邏輯去處理它。