C#中(int)a和Convert.ToInt32(a)的區別

首先,在 C# 中,int 其實就是 System.Int32,即都是32位的。 

其次,(int) 和 Convert.ToInt32 是兩個不一樣的概念,前者是類型轉換,然後者則是內容轉換,它們並不老是等效的。咱們很清楚 C# 提供類型檢查,你不能把一個 string 強制轉換成 int,隱式轉換就更加不可能,例如以下的代碼就行不通了:

string text = "1412";
int id = (int)text;

由於 string 和 int 是兩個徹底不一樣而且互不兼容的類型。說到這裏,你可能會問什麼纔算是兼容的呢?其實,可以使用 (int) 進行強類型轉換的只能是數值類型了,例如 long、short、double等,不過進行這種轉換時你須要考慮精度問題。

然而,咱們很清楚上面的代碼中 text 實際上儲存的是一個數值,咱們但願把這個數值提取出來並以 int 的形式儲存起來以便往後的運算使用,那麼你就須要進行內容轉換了。內容轉換也叫內容解釋,咱們把上面的代碼稍稍修改就能夠達到目的了:

string text = "1412";
int id = Convert.ToInt32(text);

除此以外,你還可使用 Int32.Parse 和 Int32.TryParse 來進行解釋。

另外,你發現 Convert.ToInt32 有不少重載版本,例如 Convert.ToInt32(double value);,當咱們用這個版原本把一個 double 轉換成 int 時,ToInt32 會檢查被轉換的數值是否可以用 int 表示,便是否會發生「越界」,若是是就會拋出 OverflowException,不然就會爲你轉換,但使用 (int) 進行強制轉換,若是被轉換的數值大於 Int32.MaxValue,那麼你將獲得一個錯誤的結果,例以下面的代碼:

double d = Int32.MaxValue + 0.1412;
int i = (int)d;

不過不管你進行什麼數值轉換,精度問題都是必須考慮的。
相關文章
相關標籤/搜索