C# 中,(int),Int32.Parse() 和 Convert.toInt32() 三種方法有何區別

l_serein發表於2012-11-08

在 C# 中,(int),Int32.Parse()和 Convert.toInt32() 三種方法有何區別?

 

    int 關鍵字表示一種整型,是32位的,它的 .NET Framework 型別為 System.Int32。

 

    (int)表示使用顯式強制轉換,是一種型別轉換。當我們從 int 型別到 long、float、double 或decimal 型別,可以使用隱式轉換,但是當我們從 long 型別到 int  型別轉換就需要使用顯式強制轉換,否則會產生編譯錯誤。

 

    Int32.Parse()表示將數字的字串轉換為32 位有符號整數,屬於內容轉換[1]。

    我們一種常見的方法:publicstatic int Parse(string)。

    如果 string 為空,則丟擲 ArgumentNullException 異常;

    如果 string 格式不正確,則丟擲 FormatException 異常;

    如果 string 的值小於 MinValue 或大於 MaxValue 的數字,則丟擲 OverflowException 異常。

 

 

   Convert.ToInt32() 則可以將多種型別(包括 object 引用型別)的值轉換為 int  型別,因為它有許多過載版本[2]:

    public staticint ToInt32(object);

    public staticint ToInt32(bool);

    public staticint ToInt32(byte);

    public staticint ToInt32(char);

    public staticint ToInt32(decimal);

    public staticint ToInt32(double);

    public staticint ToInt32(short);

    public staticint ToInt32(long);

    public staticint ToInt32(sbyte);

    public staticint ToInt32(string);

    ......

 

 

    (int)和Int32.Parse(),Convert.ToInt32()三者的應用舉幾個例子:   

 

    例子一:

 

    long longType =100;

    int intType  = longType;       // 錯誤,需要使用顯式強制轉換

    int intType =(int)longType; //正確,使用了顯式強制轉換

 

    例子二:

 

    stringstringType = "12345";

    int intType =(int)stringType;                //錯誤,string 型別不能直接轉換為 int  型別

    int intType =Int32.Parse(stringType);   //正確

 

    例子三:

 

    long longType =100;

    stringstringType = "12345";

    objectobjectType = "54321";

    int intType =Convert.ToInt32(longType);       //正確

    int intType =Convert.ToInt32(stringType);     //正確

    int intType =Convert.ToInt32(objectType);    //正確

 

    例子四[1]:

 

    doubledoubleType = Int32.MaxValue + 1.011;

    int intType =(int)doubleType;                               //雖然執行正確,但是得出錯誤結果

    int intType =Convert.ToInt32(doubleType)            //丟擲 OverflowException 異常

 

   (int)和Int32.Parse(),Convert.ToInt32()三者的區別:

 

    第一個在對long 型別或是浮點型到int 型別的顯式強制轉換中使用,但是如果被轉換的數值大於 Int32.MaxValue或小於 Int32.MinValue,那麼則會得到一個錯誤的結果。

 

    第二個在符合數字格式的 string 到 int  型別轉換過程中使用,並可以對錯誤的 string 數字格式的丟擲相應的異常。

 

    第三個則可以將多種型別的值轉換為 int 型別,也可以對錯誤的數值丟擲相應的異常。

 

    無論進行什麼型別的數值轉換,數值的精度問題都是我們必須考慮的

 

 

 

 

1.任何一門程式語言均有相關資料型別。C#也不例外,其基本資料型別有int,short,long,float,double,string等。資料型別之間可以相互轉換。不過轉換過程要注意小型別能轉換成大型別,但大型別一般不能轉換成小型別。如int型可以轉換成float型,但float型不一定可以轉換成int型,至少這在C,C++是這樣,但在C#中明顯有了改變,似乎微軟公司也允許這樣的形式存在了。例如:

 

double dbl_num=12345678910.456;

int k = (int) dbl_num ;//此處運用了強制轉換

 

以上程式碼如果在C,C++中強制轉換成int型,肯定會出錯,但現在在C#中卻不會出錯了,不過轉換後的值往往是溢位值,是不精通的。這點需要大家注意。

 

 2.採用另一種方式轉換型別,如int.parse(),int32.parse()等採用方法來轉換.

 

如string str=”100″;

 

int i=int.Parse(str);

 

注意:str除掉引號的型別必須和*.Parse的型別一致。如果將100改成100.78,即變成float型別,執行時將會報錯”輸入字串的格式不正確.”

 

 3.採用字尾式轉換,如k.toString(),一般運用於字串或日期等其它型別

 

int i=100;

 

string s=i.ToString();

 

 4.採用Convert類來實現轉換,該類基本支援所以型別之間的轉換

 

string   str=”100″;

 

int   i =Convert.ToInt16(str);

 

注意:str除掉引號的型別必須和Convert.*的型別一致。如果將100改成100.78,即變成float型別,執行時將會報錯”輸入字串的格式不正確.”

 

相關文章