淺析Convert,Parse和TryParse

風靈使發表於2019-02-22

最近老是看到Convert,Parse,但是忽然發現居然不知道它們的區別,所以決定好好研究下,下面是研究成果,有誤之處請指出。


    static void Main(string[] args)  
    {  
        string str = null;  
      
        int n = Convert.ToInt32(str);  
        Console.WriteLine("n的值為:"+n);  
        try  
        {  
            int m = int.Parse(str);  
            Console.WriteLine("m的值為:"+m);  
        }  
        catch (Exception ex)  
        {  
            Console.WriteLine("出現異常"+ex);  
        }  
      
      
        int result;  
        int.TryParse(str, out result);  
        Console.WriteLine("result的結果為:" + result);  
        Console.ReadKey();  
    }  

上面的例子中,體現了它們之間的關係,請容我細細說來:

  1. Convert可以將大部分的object轉成所需的型別。而ParseTryParse貌似只能將string型別轉成int型別。

  2. string型別的例項為Null時,Convert返回值是0,Parse會出現異常,TryParse返回0。TryParseParse感覺它兩最大的區別就是TryParse加了異常保護。可以接收異常string

  3. 當要轉換的是小數時,Convert會轉成偶數,即1.2換轉成22.6會轉成2Parse會出現異常,顯示的強制轉換成較小的數,沒有四捨五入的概念。

  4. int.TryParse返回的是bool0表示轉換不成功:具體用法是

    static void Main(string[] args)  
    {  
        string str1 = "5";  
        int n = int.Parse(str1);  
        int result1;  
        int.TryParse(str1, out result1);  
        Console.WriteLine("result的值是:" + result1);  
        //Console.ReadKey();  
        
        string str2 = "a";  
        //int m = Convert.ToInt32(str2);  
        ////int p = int.Parse(str2);  
        int result2;  
        int.TryParse(str2,out result2);  
      
        Console.WriteLine("result的值是:" + result2);  
    }  

  1. string為字元不是數字時,除了TryParse不出現異常,其他都出現異常。

Convert、Parse、TryParse、(int) 三個函式都是將值轉換成整數,但是四者之間各有異同,開發人員可以根據情況選用最合適的。以下解釋均經過高人驗證,希望對大家有所幫助。

1 (int)變數名[強制型別轉換]:

該轉換方式主要用於數字型別轉換,從int型別到long,float,double,decimal型別,可以使用隱式轉換,但是從long型別到int型別就需要使用顯式轉換,也就是該資料型別轉換方式,否則會產生編譯錯誤。

該方式對於浮點數會做無條件捨去,失去精確度

當然,該方式也可以進行objectint得轉換,但是,object的值要賦予int型別的值,否則會產生編譯錯誤,而且objectnull時也會出錯。

最後切忌的一點,千萬不要用來處理char型別到int型別的轉換,否則傳回的的值是ASCII程式碼,而並不是你想要的值。

2 int.Parse(string型別變數名)

該方式是將數字內容的字串轉為int型別,如果字串內容為空或者null時,則丟擲ArgumentNullException異常;如果字串內容不是數字,則丟擲FormatException異常;如果字串內容所表示數字超出int型別可表示的範圍,則丟擲OverflowException異常。

使用該方法切忌的一點就是隻能處理字串內容,而且字串內容只能在int型別可表示的範圍之內。

3 int.TryParse(string s, out int result)

該方式也是將數字內容的字串轉為int型別,但是該方式比int.Parse優越的地方,就是它不會出現異常。如果轉換成功返回 true,如果轉換失敗返回 false。很明顯,最後一個引數為輸出值,如果轉換失敗,輸出值為 0;如果轉換成功,則輸出相應的值。

4 Convert.ToInt32

該方式不僅可以將字串轉為int型別,還可以將其它型別的值轉成int型別。變數若為objectstring型別,當其值為null時,會傳回0,不會造成程式錯誤,但是若此string型別的值為string.Empty,在轉型成int時,仍會造成程式錯誤。該方式對於浮點數會做四捨五入。

該方式同強制轉換一樣,不能用來處理char型別,否則傳回的是ASCII程式碼。

相關文章