C# 中,(int),Int32.Parse() 和 Convert.toInt32() 三種方法有何區別
在 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型別,執行時將會報錯”輸入字串的格式不正確.”
相關文章
- MySQL 中 int (10) 和 int (11) 到底有什麼區別?MySql
- int 和 Integer 有什麼區別
- Mysql中 int(10)和int(11)的區別MySql
- Storm,Spark和Samza三種框架有何區別?ORMSpark框架
- TKMySQL中int?(10)?和?int?(11)?的區別zceMySql
- extern int a 和int a的區別
- 在Linux中,Jail和Chroot有何區別?LinuxAI
- [請教] CMP中ejbFind與ejbSelect方法有何區別?
- C# 中的 == 和 equals()有什麼區別?C#
- 強制型別轉換(int)、(int&)和(int*)的區別型別
- int和Integer的區別
- SQL JOIN 中 on 與 where 有何區別SQL
- Linux中fork和exec是什麼?有何區別?Linux
- 在Linux中,Linux核心和Shell有何區別?Linux
- 在K8S中,Deployment和Statefulset有何區別?K8S
- laravel/laravel和laravel/framework有何區別?LaravelFramework
- EMR和ERP有何區別(轉)
- (int)a、&a、(int)&a、(int&)a的區別
- C# 中List中的Count和Count(),有什麼區別C#
- int[] 、 list<int> 、 list<int>[] 的區別
- 超外差和超再生模組有何區別?
- Python和C#有哪些區別?PythonC#
- @AutoConfigurationPackage 和 @ComponentScan 有何區別?Package
- 住宅IP和資料中心IP有何區別?
- .NET中的三種Timer的區別和用法
- Python中類方法和例項方法有什麼區別?Python
- mysql中tinyint、smallint、int和bigint型別的用法區別MySql型別
- 物聯網閘道器中MQTT和Modbus之間有何區別MQQT
- Linux中打包和壓縮是什麼?兩者有何區別?Linux
- C#中Hashtable和HashMap的區別C#HashMap
- C#中ref和out的區別C#
- C語言之int *f()、int(*f)()、int *a[]、int (*a)[] 區別小記C語言
- 伺服器和虛擬主機有何區別伺服器
- DOM 精通了?請問 Node 和 Element 有何區別?
- DOM 精通了?請問 Node 和 Elment 有何區別?
- ConcurrentHashMap和oscache等物件快取有何區別HashMap物件快取
- TDengine 3.0 的 Update 有何區別?
- Thead物件的sleep方法,和yield方法有何區別,為什麼實現的執行緒中,在run方法中要呼叫sleep方法?物件執行緒