Try   HackMD

Convert.ToInt32 和直接 (int) 的差別

  1. Convert.ToInt32 方法
    功能: 將不同的數據類型(如字符串、浮點數、布爾值等)轉換為 int。它是 Convert 類的一部分,具有處理多種輸入類型的能力。

    行為:

    -可以將 null 值轉換為 0,而不會拋出異常。
    -可以處理一些字符串值,如 "123" 轉換為 123。
    -如果字符串中包含無法轉換為整數的內容(如字母),會拋出 FormatException。
    -支持將 true 轉換為 1,將 false 轉換為 0。
    -將浮點數轉換為整數時,會執行四捨五入操作。

    ​​​​string str = "123";
    ​​​​int number = Convert.ToInt32(str); // number = 123
    
    ​​​​bool isTrue = true;
    ​​​​int boolToInt = Convert.ToInt32(isTrue); // boolToInt = 1
    
    ​​​​string nullString = null;
    ​​​​int nullToInt = Convert.ToInt32(nullString); // nullToInt = 0
    
    ​​​​double doubleValue = 123.45;
    ​​​​int roundedInt = Convert.ToInt32(doubleValue); // roundedInt = 123
    

  1. (int) 類型轉換(強制轉換)
    功能: 將兼容類型(如浮點數、長整數)直接轉換為 int。這種轉換是強制性的,適用於數值類型之間的轉換。

    行為:

    -無法處理 null,如果試圖將 null 轉換為 int,會拋出 NullReferenceException。
    -只能用於兼容的數值類型之間,例如 double 到 int,float 到 int。
    -將浮點數轉換為整數時,會直接截斷小數部分(向下取整)。
    -不支援從字符串轉換為 int,如果使用 (int) 強制轉換字符串,會出現編譯錯誤。

    ​​​​double doubleValue = 123.45;
    ​​​​int truncatedInt = (int)doubleValue; // truncatedInt = 123
    
    ​​​​long longValue = 123456789;
    ​​​​int intFromLong = (int)longValue; // intFromLong = 123456789
    
    ​​​​// string str = "123";
    ​​​​// int number = (int)str; // 錯誤:無法直接從字符串轉換
    

大補帖

特性 Convert.ToInt32 (int) 強制轉換
支持的輸入類型 多種類型(字符串、布爾值、數字類型、null 等) 兼容的數值類型(doublefloatlong 等)
null 處理 轉換為 0 拋出 NullReferenceException
字符串處理 可以處理,當字符串為有效數字時進行轉換 不支持
浮點數轉整數 執行四捨五入 直接截斷小數部分(向下取整)
異常處理 當無法轉換時拋出 FormatException 對於兼容類型不拋異常,但可能存在數據丟失