網(wǎng)站首頁 編程語言 正文
C# 的類型轉換有顯式轉型 和 隱式轉型 兩種方式。
- 顯式轉型:有可能引發(fā)異常、精確度丟失及其他問題的轉換方式。需要使用手段進行轉換操作。
- 隱式轉型:不會改變原有數(shù)據(jù)精確度、引發(fā)異常,不會發(fā)生任何問題的轉換方式。由系統(tǒng)自動轉換。
不同類型的數(shù)據(jù)進行操作(加減乘除賦值等等),是需要進行 類型轉換 后,才能繼續(xù)操作。所以需要“類型轉換”。
隱式轉型
隱式轉型容易理解,當兩種或多種數(shù)據(jù)類型進行某種操作時,不需要干預,系統(tǒng)會自動進行隱式轉換。
如
int i = 66666; long b = i; //轉為 long 類型后為 b 賦值
通常情況下,多種 值類型 進行計算時,系統(tǒng)會自動進行隱式轉型,并且總是轉為范圍更大的數(shù)據(jù)類型,并且不會發(fā)生精確度變化、數(shù)字大小變化等等。
顯式轉型
問題是,但你需要把一個 long 類型的數(shù)據(jù)轉成 int 時,又或者讓 string 與 int 互轉,當數(shù)據(jù)小數(shù)點太多時,這時候就必須使用顯式轉型。
在繼續(xù)下列教程前,要想說明一點。
char 是整型!
雖然char存儲的是字符而不是數(shù)字,但它的確是整型,翻回上面看一下圖,可以發(fā)現(xiàn)。
也就是說,char是可以參與算術運算的。但并不是直接參與,而是char的基礎值。c# 中的char值是基于Unicode的。通過Unicode,任意字符都可以解釋成數(shù)字。
一,使用 ([type]) 轉型操作符
此方法適用與值類型轉換( string屬于引用類型)
在需要轉換的變量前加上( [類型] )即可
請仔細觀察下面兩圖的差異
第二張圖中的代碼中,第二行,為 int b = (int)i;
在需要轉換的變量前使用 ([type]) 這種格式進行轉換,如(int)、(float)、(long)
注意,
此種方法只能對值類型數(shù)據(jù)進行轉換。
不應將范圍大的類型 往 小 轉換 或 將浮點型轉為整形,不能將超范圍的往小了轉。
例如 float 轉為 int,精確度會被自動丟失
輸出 666
將大于其類型范圍的數(shù)給它時,會發(fā)生溢出。
char 可以直接跟 int 或 long 使用。
int a ='1' + '3'; //小轉大 char b = (char)a; //大轉小
int c = 'a' + '5'; //char可以直接轉為 int
注意上下例子的不同 ,int 直接轉為char,會報錯
第二,[Type].Parse()
([type]) 方法是無法在值類型、引用類型( string 類型)間轉換的。
但每種數(shù)據(jù)類型都提供一個Parse()方法,它允許把字符串轉成對應的 數(shù)值類型。
int.Parse()
float.Parse()
請看例子
string str = "666"; long i = int.Parse(str); Console.WriteLine($"{i},{i.GetType()}"); Console.ReadKey();
(圖如)
注意,
Parse() 是專為 string 類型轉成 值類型 提供功能的!
Parse() 是為符合數(shù)字格式的 string 類型進行轉換!
下面的例子都是錯誤用法 !
Parse() 是將符合數(shù)字格式的字符串轉為數(shù)字,也就是說,
- ( )括號內的必須為字符串 !
- 字符串的內容必須為數(shù)字 !
例子 1 ( ) 括號內的內容不是字符串
例子 2 變量 str 的內容不是 有效數(shù)字格式
第三,[Type].TryParse()
格式如下
- int.TryParse()
- float.TryParse()
.TryParse()與.Parse()相似,但是使用形式不太一樣,
[類型].TryParse(要更改的字符串,out 存儲到哪個變量);
最重要的不同點在于,.TryParse() 在轉換失敗時,不會引發(fā)異常,而是返回 flase
例子
string str = "666"; int i; bool b = int.TryParse(str,out i); //接收轉換結果 或者 string str = "666"; int i; int.TryParse(str,out i); //不接收轉換結果
如果你不知道 out 的使用,請查閱C#中的out參數(shù)/ref參數(shù)/params可變參數(shù)
第四,System.Convert
方法例子
System.Convert.ToSingle();
System.Convert.ToInt32();
System.Convert.ToDouble();
System.Convert 允許將一種類型轉為另一種類型。
常見 類型列表: 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); //報錯 int a = 66666; bool c = System.Convert.ToBoolean(a); //正確 string str = "666.66"; bool c = System.Convert.ToBoolean(str); //報錯
System.Convert 在轉換是也需要注意 格式 才能轉換成功。
同樣,此方式也會發(fā)生精確度、數(shù)字大小改變
?
第五,System.Convert
.Tostring()
每種數(shù)據(jù)類型都提供了轉為字符串類型的方法 ToString()
無論是值類型還是DateTime 等各種引用類型。
ToString()使用方法最為簡單,請留意下列例子的紅色背景部分
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(); } }
看到了吧?無論什么類型,只需在后面加上 ToString() , 都能 輸出 string 類型的內容。(不是轉為 string 類型!)
當然,ToString() 是一個方法,并提供了 一下傳入?yún)?shù),每種類型都有幾個重載的 TOString() 方法,例如DateTime的
public string ToString(string format, IFormatProvider provider); public string ToString(string format); public string ToString(IFormatProvider provider); public override string ToString();
其它方面不再贅述。
復制下列代碼到控制臺,看看輸出了什么
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(); } }
原文鏈接:https://www.cnblogs.com/whuanle/p/9938918.html
相關推薦
- 2022-04-12 iOS?block的值捕獲與指針捕獲詳解_IOS
- 2022-04-18 C#實現(xiàn)在窗體上的統(tǒng)計圖效果_C#教程
- 2022-04-17 WPF框架Prism中導航Navigation用法介紹_基礎應用
- 2022-08-01 C#串口編程System.IO.Ports.SerialPort類_C#教程
- 2022-12-27 SAP技巧之修改自帶搜索幫助為自定數(shù)據(jù)集_數(shù)據(jù)庫其它
- 2022-09-13 c++11中的noexcept關鍵字_C 語言
- 2022-03-23 Qt實現(xiàn)兩個獨立窗口的信號通信_C 語言
- 2022-07-18 python中數(shù)組array和列表list的基本用法及區(qū)別解析_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支