App下載

C# 編程語(yǔ)言學(xué)習(xí)系列(四)

販賣(mài)月光的小女孩 2021-12-09 11:32:32 瀏覽數(shù) (2689)
反饋

上一篇文章中,學(xué)習(xí)記錄了 C# 語(yǔ)言中常量和各類(lèi)運(yùn)算符的內(nèi)容。在涉及運(yùn)算符的時(shí)候,還提到了相關(guān)數(shù)據(jù)類(lèi)型轉(zhuǎn)換,今天這篇文章來(lái)詳細(xì)學(xué)習(xí)一下關(guān)于 C# 語(yǔ)言中數(shù)據(jù)類(lèi)型的轉(zhuǎn)換。

一、類(lèi)型轉(zhuǎn)換

在第二天的學(xué)習(xí)中,已經(jīng)學(xué)習(xí)了C# 語(yǔ)言中的基礎(chǔ)數(shù)據(jù)類(lèi)型,如整數(shù)類(lèi)型 int、浮點(diǎn)數(shù)類(lèi)型 float、布爾類(lèi)型 bool 以及字符類(lèi)型 char 等等。這時(shí)候有一些疑問(wèn)了。如果整數(shù)和浮點(diǎn)數(shù)相加,那么結(jié)果返回的是整數(shù)還是浮點(diǎn)數(shù)類(lèi)型?數(shù)字類(lèi)型的值可以和字符類(lèi)型進(jìn)行算術(shù)操作嗎?布爾值和其他類(lèi)型操作的結(jié)果是什么?

解答這些疑問(wèn),就需要對(duì)數(shù)據(jù)類(lèi)型轉(zhuǎn)換有所了解。

1、轉(zhuǎn)換形式

在 C# 數(shù)據(jù)類(lèi)型的形式也是分為兩種:

(1)隱式類(lèi)型轉(zhuǎn)換 - 這是一個(gè) C# 默認(rèn)的以安全的形式進(jìn)行的轉(zhuǎn)換。例如:從小的數(shù)類(lèi)型到大的整數(shù)類(lèi)型,從派生類(lèi)到基類(lèi)。

int i = 3;
long l = i; // l = 3

(2)顯示類(lèi)型轉(zhuǎn)換 - 就是強(qiáng)制類(lèi)型轉(zhuǎn)換,需要強(qiáng)制轉(zhuǎn)換運(yùn)算符。使用顯式轉(zhuǎn)換,可能會(huì)造成數(shù)據(jù)缺失。

int i = 1000000;
short s = (short)i; // s = 16960

2、不同類(lèi)型的轉(zhuǎn)換

接下來(lái)就看一看不同的數(shù)據(jù)類(lèi)型之間哪些需要顯示轉(zhuǎn)換,而哪些又屬于是隱式轉(zhuǎn)換。

(1)浮點(diǎn)數(shù)和整數(shù)類(lèi)型

int a = 3;
float b = 2.3f;


int c = a + (int)b; // c = 5
float d = a + b; // d = 5.3

整數(shù)類(lèi)型可以被默認(rèn)隱式轉(zhuǎn)換為浮點(diǎn)數(shù),而浮點(diǎn)數(shù)如果想要轉(zhuǎn)換為整數(shù),則需要使用整數(shù)類(lèi)型的強(qiáng)轉(zhuǎn)運(yùn)算符。

浮點(diǎn)數(shù)強(qiáng)轉(zhuǎn)為整數(shù)類(lèi)型之后,只保留了整數(shù)部分,小數(shù)部分的數(shù)值丟失。

(2)字符和整數(shù)類(lèi)型

char a = 'A';
int x = c; // x = 65


int b = 49;
char y = (char)b; // y = '1'

字符類(lèi)型的值可以被隱式轉(zhuǎn)換為整數(shù)類(lèi)型,而整數(shù)類(lèi)型想要轉(zhuǎn)換為字符類(lèi)型,則需要 char 強(qiáng)轉(zhuǎn)。

字符之所以能和整數(shù)類(lèi)型進(jìn)行轉(zhuǎn)換,這是因?yàn)?ASCII 或者 Unicode 等編碼表,每個(gè)字符對(duì)應(yīng)的就是一個(gè)數(shù)字。然而這些數(shù)字對(duì)于計(jì)算機(jī)而言,就是一串的二進(jìn)制。雖然在我們看來(lái)是數(shù)字和文字,區(qū)別很大,但對(duì)于計(jì)算機(jī)而言它們都只是二進(jìn)制的數(shù)字而已。

(3)布爾類(lèi)型

bool n;
int a = 1;
n = (bool)a; // 錯(cuò)誤
float b = 2.3f;
n = (bool)b; // 錯(cuò)誤
char c = '0';
n = (bool)c; // 錯(cuò)誤

布爾類(lèi)型不能夠直接和其他類(lèi)型隱式轉(zhuǎn)換,也不能直接使用類(lèi)型強(qiáng)轉(zhuǎn)運(yùn)算符來(lái)進(jìn)行強(qiáng)制轉(zhuǎn)換。

想要轉(zhuǎn)換為布爾類(lèi)型,就需要引入 C# 內(nèi)置的一些數(shù)據(jù)類(lèi)型轉(zhuǎn)換方法。

3、類(lèi)型轉(zhuǎn)換方法

(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

轉(zhuǎn)換整數(shù)類(lèi)型的方法有 ToInt16 相當(dāng)于 short 類(lèi)型;ToInt32 相當(dāng)于 Int 類(lèi)型,也是程序中最常使用的;ToInt64 相當(dāng)于 Long 類(lèi)型。

這個(gè)方法通常是應(yīng)用在,當(dāng)接收用戶輸入數(shù)值的時(shí)候,轉(zhuǎn)換為整數(shù)類(lèi)型。

(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() 兩個(gè)方法的作用是差不多的,后者是屬于 Object 的擴(kuò)展方法,因此所有類(lèi)型都會(huì)有 ToString() 這個(gè)方法。前者里面的參數(shù),可以使各種類(lèi)型的基礎(chǔ)數(shù)據(jù)類(lèi)型,或者 Object 類(lèi)對(duì)象。

一般情況,上面這兩個(gè)方法都是可以通用的。但是當(dāng)返回的數(shù)據(jù)類(lèi)型中可能出現(xiàn) null 值的情況,調(diào)用了 ToString 方法,就會(huì)返回 NullReferenceException。而 Convert.ToString 不會(huì)拋出異常,而是返回一個(gè)空字符串。

(4) 其他轉(zhuǎn)換方法

Convert.ToUint32 - 轉(zhuǎn)換為無(wú)符號(hào)的整數(shù)類(lèi)型。和 Convert.ToInt32 很相似,一樣都有16位和64位。

Convert.ToDecimal - 將浮點(diǎn)數(shù)或者整數(shù)轉(zhuǎn)換為 Decimal 十進(jìn)制類(lèi)型。

Convert.Double - 轉(zhuǎn)為 Double 雙精度浮點(diǎn)數(shù)類(lèi)型。 ...

二、總結(jié)

關(guān)于 C# 一些簡(jiǎn)單的數(shù)據(jù)類(lèi)型轉(zhuǎn)換的內(nèi)容就記錄到這了。

至于其他更深層次的內(nèi)容,就留到后面學(xué)習(xí)到了,再接著進(jìn)行延伸擴(kuò)展。

C#

0 人點(diǎn)贊