在上一篇文章中,學習記錄了 C# 語言中常量和各類運算符的內(nèi)容。在涉及運算符的時候,還提到了相關數(shù)據(jù)類型轉換,今天這篇文章來詳細學習一下關于 C# 語言中數(shù)據(jù)類型的轉換。
一、類型轉換
在第二天的學習中,已經(jīng)學習了C# 語言中的基礎數(shù)據(jù)類型,如整數(shù)類型 int
、浮點數(shù)類型 float
、布爾類型 bool
以及字符類型 char
等等。這時候有一些疑問了。如果整數(shù)和浮點數(shù)相加,那么結果返回的是整數(shù)還是浮點數(shù)類型?數(shù)字類型的值可以和字符類型進行算術操作嗎?布爾值和其他類型操作的結果是什么?
解答這些疑問,就需要對數(shù)據(jù)類型轉換有所了解。
1、轉換形式
在 C# 數(shù)據(jù)類型的形式也是分為兩種:
(1)隱式類型轉換 - 這是一個 C# 默認的以安全的形式進行的轉換。例如:從小的數(shù)類型到大的整數(shù)類型,從派生類到基類。
int i = 3;
long l = i; // l = 3
(2)顯示類型轉換 - 就是強制類型轉換,需要強制轉換運算符。使用顯式轉換,可能會造成數(shù)據(jù)缺失。
int i = 1000000;
short s = (short)i; // s = 16960
2、不同類型的轉換
接下來就看一看不同的數(shù)據(jù)類型之間哪些需要顯示轉換,而哪些又屬于是隱式轉換。
(1)浮點數(shù)和整數(shù)類型
int a = 3;
float b = 2.3f;
int c = a + (int)b; // c = 5
float d = a + b; // d = 5.3
整數(shù)類型可以被默認隱式轉換為浮點數(shù),而浮點數(shù)如果想要轉換為整數(shù),則需要使用整數(shù)類型的強轉運算符。
浮點數(shù)強轉為整數(shù)類型之后,只保留了整數(shù)部分,小數(shù)部分的數(shù)值丟失。
(2)字符和整數(shù)類型
char a = 'A';
int x = c; // x = 65
int b = 49;
char y = (char)b; // y = '1'
字符類型的值可以被隱式轉換為整數(shù)類型,而整數(shù)類型想要轉換為字符類型,則需要 char 強轉。
字符之所以能和整數(shù)類型進行轉換,這是因為 ASCII 或者 Unicode 等編碼表,每個字符對應的就是一個數(shù)字。然而這些數(shù)字對于計算機而言,就是一串的二進制。雖然在我們看來是數(shù)字和文字,區(qū)別很大,但對于計算機而言它們都只是二進制的數(shù)字而已。
(3)布爾類型
bool n;
int a = 1;
n = (bool)a; // 錯誤
float b = 2.3f;
n = (bool)b; // 錯誤
char c = '0';
n = (bool)c; // 錯誤
布爾類型不能夠直接和其他類型隱式轉換,也不能直接使用類型強轉運算符來進行強制轉換。
想要轉換為布爾類型,就需要引入 C# 內(nèi)置的一些數(shù)據(jù)類型轉換方法。
3、類型轉換方法
(1) Convert.ToBoolean(param)
bool b;
string str = 'false';
b = Convert.ToBoolean(str); // b = False
int num = 1;
b = Convert.ToBoolean(num); // b = True
float ff = 3.24f;
b = Convert.ToBoolean(ff); // b = True
(2) Convert.ToInt32(param)
int i;
char word = '1';
i = Convert.ToInt32(word); // i = 49
string num = "321";
i = Convert.ToInt32(num); // i = 321
bool boo = true;
i = Convert.ToInt32(num); // i = 1
轉換整數(shù)類型的方法有 ToInt16
相當于 short
類型;ToInt32
相當于 Int
類型,也是程序中最常使用的;ToInt64
相當于 Long
類型。
這個方法通常是應用在,當接收用戶輸入數(shù)值的時候,轉換為整數(shù)類型。
(3) ToString()
string str;
int num = 3234;
str = num.ToString(); // str = "3234"
bool boo = false;
str = boo.ToString(); // str = "false"
float foo = 32.43f;
str = foo.ToString(); // str = "32.43"
Convert.ToString(param)
和 ToString()
兩個方法的作用是差不多的,后者是屬于 Object
的擴展方法,因此所有類型都會有 ToString()
這個方法。前者里面的參數(shù),可以使各種類型的基礎數(shù)據(jù)類型,或者 Object
類對象。
一般情況,上面這兩個方法都是可以通用的。但是當返回的數(shù)據(jù)類型中可能出現(xiàn) null 值的情況,調(diào)用了 ToString
方法,就會返回 NullReferenceException
。而 Convert.ToString
不會拋出異常,而是返回一個空字符串。
(4) 其他轉換方法
Convert.ToUint32
- 轉換為無符號的整數(shù)類型。和 Convert.ToInt32
很相似,一樣都有16位和64位。
Convert.ToDecimal
- 將浮點數(shù)或者整數(shù)轉換為 Decimal
十進制類型。
Convert.Double
- 轉為 Double
雙精度浮點數(shù)類型。
...
二、總結
關于 C# 一些簡單的數(shù)據(jù)類型轉換的內(nèi)容就記錄到這了。
至于其他更深層次的內(nèi)容,就留到后面學習到了,再接著進行延伸擴展。