淺析Convert,Parse和TryParse
最近老是看到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();
}
上面的例子中,體現了它們之間的關係,請容我細細說來:
-
Convert
可以將大部分的object
轉成所需的型別。而Parse
和TryParse
貌似只能將string
型別轉成int
型別。 -
當
string
型別的例項為Null
時,Convert
返回值是0,Parse
會出現異常,TryParse
返回0。TryParse
和Parse
感覺它兩最大的區別就是TryParse
加了異常保護。可以接收異常string
。 -
當要轉換的是小數時,
Convert
會轉成偶數,即1.2
換轉成2
,2.6
會轉成2
。Parse
會出現異常,顯示的強制轉換成較小的數,沒有四捨五入的概念。 -
int.TryParse
返回的是bool
,0
表示轉換不成功:具體用法是
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);
}
- 當
string
為字元不是數字時,除了TryParse
不出現異常,其他都出現異常。
Convert、Parse、TryParse、(int)
三個函式都是將值轉換成整數,但是四者之間各有異同,開發人員可以根據情況選用最合適的。以下解釋均經過高人驗證,希望對大家有所幫助。
1 (int
)變數名[強制型別轉換]:
該轉換方式主要用於數字型別轉換,從int
型別到long,float,double,decimal
型別,可以使用隱式轉換,但是從long
型別到int
型別就需要使用顯式轉換,也就是該資料型別轉換方式,否則會產生編譯錯誤。
該方式對於浮點數會做無條件捨去,失去精確度
當然,該方式也可以進行object
到int
得轉換,但是,object
的值要賦予int型別的值,否則會產生編譯錯誤,而且object
為null
時也會出錯。
最後切忌的一點,千萬不要用來處理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
型別。變數若為object
或string
型別,當其值為null
時,會傳回0
,不會造成程式錯誤,但是若此string
型別的值為string.Empty
,在轉型成int
時,仍會造成程式錯誤。該方式對於浮點數會做四捨五入。
該方式同強制轉換一樣,不能用來處理char
型別,否則傳回的是ASCII
程式碼。
相關文章
- .39-淺析webpack原始碼之parser.parseWeb原始碼
- 淺析webpack原始碼之convert-argv模組(二)Web原始碼
- 淺析IOC 和 DI
- 淺析Spring的IoC和DISpring
- 淺析mybatis中${}和#{}取值區別MyBatis
- 淺析HDFS架構和設計架構
- AnalyticDB實現和特點淺析
- 淺析Beautiful Soup庫和Lxml庫XML
- java閉包和回撥淺析Java
- iOS Block淺淺析iOSBloC
- 淺析RedisRedis
- Jvm 淺析JVM
- CGLib淺析CGLib
- 淺析XMLXML
- MongoDB淺析MongoDB
- 淺析 JWTJWT
- 淺析 DDD
- RunLoop 淺析OOP
- 淺析 ReentrantLockReentrantLock
- Unstated淺析
- 淺析SharedPreferences
- Nginx淺析Nginx
- 淺析PromisePromise
- ejs 淺析JS
- 淺析KubernetesStatefulSet
- AIDL淺析AI
- ArrayList淺析
- 淺析InnoDB引擎的索引和索引原理索引
- Flutter佈局和繪製流程淺析Flutter
- 淺析iOS手遊逆向和保護iOS
- C語言巨集和函式淺析C語言函式
- 淺析靜態IP的用途和優點
- -XX:PretenureSizeThreshold的預設值和作用淺析
- 淺析c++11中的“=default“和“=delete“C++delete
- react中 受控元件和 非受控元件 淺析React元件
- 淺析package.json中的devdependencies 和 dependenciesPackageJSONdev
- 淺析AIGC for MMKGAIGC
- Seata原理淺析