C#數(shù)據(jù)類型轉(zhuǎn)換(顯式轉(zhuǎn)型、隱式轉(zhuǎn)型、強(qiáng)制轉(zhuǎn)型)
C# 的類型轉(zhuǎn)換有顯式轉(zhuǎn)型 和 隱式轉(zhuǎn)型 兩種方式。
- 顯式轉(zhuǎn)型:有可能引發(fā)異常、精確度丟失及其他問(wèn)題的轉(zhuǎn)換方式。需要使用手段進(jìn)行轉(zhuǎn)換操作。
- 隱式轉(zhuǎn)型:不會(huì)改變?cè)袛?shù)據(jù)精確度、引發(fā)異常,不會(huì)發(fā)生任何問(wèn)題的轉(zhuǎn)換方式。由系統(tǒng)自動(dòng)轉(zhuǎn)換。
不同類型的數(shù)據(jù)進(jìn)行操作(加減乘除賦值等等),是需要進(jìn)行 類型轉(zhuǎn)換 后,才能繼續(xù)操作。所以需要“類型轉(zhuǎn)換”。
隱式轉(zhuǎn)型
隱式轉(zhuǎn)型容易理解,當(dāng)兩種或多種數(shù)據(jù)類型進(jìn)行某種操作時(shí),不需要干預(yù),系統(tǒng)會(huì)自動(dòng)進(jìn)行隱式轉(zhuǎn)換。
如
int i = 66666; long b = i; //轉(zhuǎn)為 long 類型后為 b 賦值
通常情況下,多種 值類型 進(jìn)行計(jì)算時(shí),系統(tǒng)會(huì)自動(dòng)進(jìn)行隱式轉(zhuǎn)型,并且總是轉(zhuǎn)為范圍更大的數(shù)據(jù)類型,并且不會(huì)發(fā)生精確度變化、數(shù)字大小變化等等。
顯式轉(zhuǎn)型
問(wèn)題是,但你需要把一個(gè) long 類型的數(shù)據(jù)轉(zhuǎn)成 int 時(shí),又或者讓 string 與 int 互轉(zhuǎn),當(dāng)數(shù)據(jù)小數(shù)點(diǎn)太多時(shí),這時(shí)候就必須使用顯式轉(zhuǎn)型。
在繼續(xù)下列教程前,要想說(shuō)明一點(diǎn)。
char 是整型!
雖然char存儲(chǔ)的是字符而不是數(shù)字,但它的確是整型,翻回上面看一下圖,可以發(fā)現(xiàn)。
也就是說(shuō),char是可以參與算術(shù)運(yùn)算的。但并不是直接參與,而是char的基礎(chǔ)值。c# 中的char值是基于Unicode的。通過(guò)Unicode,任意字符都可以解釋成數(shù)字。
一,使用 ([type]) 轉(zhuǎn)型操作符
此方法適用與值類型轉(zhuǎn)換( string屬于引用類型)
在需要轉(zhuǎn)換的變量前加上( [類型] )即可
請(qǐng)仔細(xì)觀察下面兩圖的差異
第二張圖中的代碼中,第二行,為 int b = (int)i;
在需要轉(zhuǎn)換的變量前使用 ([type]) 這種格式進(jìn)行轉(zhuǎn)換,如(int)、(float)、(long)
注意,
此種方法只能對(duì)值類型數(shù)據(jù)進(jìn)行轉(zhuǎn)換。
不應(yīng)將范圍大的類型 往 小 轉(zhuǎn)換 或 將浮點(diǎn)型轉(zhuǎn)為整形,不能將超范圍的往小了轉(zhuǎn)。
例如 float 轉(zhuǎn)為 int,精確度會(huì)被自動(dòng)丟失
輸出 666
將大于其類型范圍的數(shù)給它時(shí),會(huì)發(fā)生溢出。
char 可以直接跟 int 或 long 使用。
int a ='1' + '3'; //小轉(zhuǎn)大 char b = (char)a; //大轉(zhuǎn)小
int c = 'a' + '5'; //char可以直接轉(zhuǎn)為 int
注意上下例子的不同 ,int 直接轉(zhuǎn)為char,會(huì)報(bào)錯(cuò)
第二,[Type].Parse()
([type]) 方法是無(wú)法在值類型、引用類型( string 類型)間轉(zhuǎn)換的。
但每種數(shù)據(jù)類型都提供一個(gè)Parse()方法,它允許把字符串轉(zhuǎn)成對(duì)應(yīng)的 數(shù)值類型。
int.Parse()
float.Parse()
請(qǐng)看例子
string str = "666"; long i = int.Parse(str); Console.WriteLine($"{i},{i.GetType()}"); Console.ReadKey();
(圖如)
注意,
Parse() 是專為 string 類型轉(zhuǎn)成 值類型 提供功能的!
Parse() 是為符合數(shù)字格式的 string 類型進(jìn)行轉(zhuǎn)換!
下面的例子都是錯(cuò)誤用法 !
Parse() 是將符合數(shù)字格式的字符串轉(zhuǎn)為數(shù)字,也就是說(shuō),
- ( )括號(hào)內(nèi)的必須為字符串 !
- 字符串的內(nèi)容必須為數(shù)字 !
例子 1 ( ) 括號(hào)內(nèi)的內(nèi)容不是字符串
例子 2 變量 str 的內(nèi)容不是 有效數(shù)字格式
第三,[Type].TryParse()
格式如下
- int.TryParse()
- float.TryParse()
.TryParse()與.Parse()相似,但是使用形式不太一樣,
[類型].TryParse(要更改的字符串,out 存儲(chǔ)到哪個(gè)變量);
最重要的不同點(diǎn)在于,.TryParse() 在轉(zhuǎn)換失敗時(shí),不會(huì)引發(fā)異常,而是返回 flase
例子
string str = "666"; int i; bool b = int.TryParse(str,out i); //接收轉(zhuǎn)換結(jié)果 或者 string str = "666"; int i; int.TryParse(str,out i); //不接收轉(zhuǎn)換結(jié)果
如果你不知道 out 的使用,請(qǐng)查閱C#中的out參數(shù)/ref參數(shù)/params可變參數(shù)
第四,System.Convert
方法例子
System.Convert.ToSingle();
System.Convert.ToInt32();
System.Convert.ToDouble();
System.Convert 允許將一種類型轉(zhuǎn)為另一種類型。
常見 類型列表: char、sbyte、short、int、long、uint、ulong、float、double、decimal、string、bool ... ...
但是,同樣需要格式支持!
string str = "666"; int a= System.Convert.ToInt32(str); //正確 string str = "666.66"; int a= System.Convert.ToInt32(str); //報(bào)錯(cuò) int a = 66666; bool c = System.Convert.ToBoolean(a); //正確 string str = "666.66"; bool c = System.Convert.ToBoolean(str); //報(bào)錯(cuò)
System.Convert 在轉(zhuǎn)換是也需要注意 格式 才能轉(zhuǎn)換成功。
同樣,此方式也會(huì)發(fā)生精確度、數(shù)字大小改變
第五,System.Convert
.Tostring()
每種數(shù)據(jù)類型都提供了轉(zhuǎn)為字符串類型的方法 ToString()
無(wú)論是值類型還是DateTime 等各種引用類型。
ToString()使用方法最為簡(jiǎn)單,請(qǐng)留意下列例子的紅色背景部分
using System; using System.IO; public class Test { static void Main() { int a = 666; string aa = a.ToString(); Console.WriteLine($"{aa}"); float b = 666.666F; string bb = b.ToString(); Console.WriteLine($"{bb}"); DateTime c = DateTime.Now; string cc = c.ToString(); Console.WriteLine($"{cc}"); FileInfo d = new FileInfo("E:\\test.txt"); string dd = d.ToString(); Console.WriteLine($"{dd}"); string ee; try { int x = 1; int y = 0; int e = x / y; } catch (Exception ex) { ee = ex.ToString(); Console.WriteLine($"{ee}"); } Console.ReadKey(); } }
看到了吧?無(wú)論什么類型,只需在后面加上 ToString() , 都能 輸出 string 類型的內(nèi)容。(不是轉(zhuǎn)為 string 類型?。?/p>
當(dāng)然,ToString() 是一個(gè)方法,并提供了 一下傳入?yún)?shù),每種類型都有幾個(gè)重載的 TOString() 方法,例如DateTime的
public string ToString(string format, IFormatProvider provider); public string ToString(string format); public string ToString(IFormatProvider provider); public override string ToString();
其它方面不再贅述。
復(fù)制下列代碼到控制臺(tái),看看輸出了什么
using System; using System.IO; public class Test { static void Main() { int a = 666; string aa = a.ToString(); Console.WriteLine($"{aa}"); float b = 666.666F; string bb = b.ToString(); Console.WriteLine($"{bb}"); DateTime c = DateTime.Now; string cc = c.ToString(); Console.WriteLine($"{cc}"); FileInfo d = new FileInfo("E:\\test.txt"); string dd = d.ToString(); Console.WriteLine($"{dd}"); string ee; try { int x = 1; int y = 0; int e = x / y; } catch (Exception ex) { ee = ex.ToString(); Console.WriteLine($"{ee}"); } Console.ReadKey(); } }
到此這篇關(guān)于C#數(shù)據(jù)類型轉(zhuǎn)換(顯式轉(zhuǎn)型、隱式轉(zhuǎn)型、強(qiáng)制轉(zhuǎn)型)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C#中的自動(dòng)類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換
- 詳解c# 強(qiáng)制轉(zhuǎn)換和類型轉(zhuǎn)換
- C# 數(shù)據(jù)類型轉(zhuǎn)換
- C#類型轉(zhuǎn)換之自定義隱式轉(zhuǎn)換和顯式轉(zhuǎn)換
- C#實(shí)現(xiàn)數(shù)組元素的數(shù)據(jù)類型轉(zhuǎn)換方法詳解
- C#預(yù)定義的基礎(chǔ)類型轉(zhuǎn)換
- 詳解C#如何實(shí)現(xiàn)隱式類型轉(zhuǎn)換
- C#避免類型轉(zhuǎn)換異常的三種方法
- C# 類型轉(zhuǎn)換(隱式類型,顯式類型,自定義類型)
相關(guān)文章
如何應(yīng)用C#實(shí)現(xiàn)UDP的分包組包
本篇文章小編將為大家介紹,如何應(yīng)用C#實(shí)現(xiàn)UDP的分包組包。需要的朋友參考下2013-04-04C#中如何自定義配置上周和本周起始日來(lái)查詢業(yè)務(wù)數(shù)據(jù)(思路詳解)
在C#中并沒有封裝的方法根據(jù)我們需要來(lái)直接獲取上一周某天到某天、本周某天到某天,所以需要我們自己封裝方法來(lái)實(shí)現(xiàn)(我們也可以按照這個(gè)思路使用其他語(yǔ)言來(lái)實(shí)現(xiàn)),感興趣的朋友跟隨小編一起看看吧2023-09-09c#下注冊(cè)表操作的一個(gè)小細(xì)節(jié)
c#下注冊(cè)表操作的一個(gè)小細(xì)節(jié)...2007-11-11C#?Winform文本面板帶滾動(dòng)條的實(shí)現(xiàn)過(guò)程
當(dāng)數(shù)據(jù)過(guò)多時(shí),往往無(wú)法在一頁(yè)中展示,所以非常需要一個(gè)滾動(dòng)條來(lái)調(diào)節(jié)頁(yè)面內(nèi)容,這篇文章主要給大家介紹了關(guān)于C#?Winform文本面板帶滾動(dòng)條的實(shí)現(xiàn)過(guò)程,需要的朋友可以參考下2022-12-12C#實(shí)現(xiàn)封裝常用Redis工具類的示例代碼
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)封裝常用Redis工具類的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03Unity實(shí)現(xiàn)卡牌翻動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)卡牌翻動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02