App下載

C# 編程語言學習系列(四)

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

上一篇文章中,學習記錄了 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)容,就留到后面學習到了,再接著進行延伸擴展。

C#

0 人點贊