在C#中,将一种数据类型的值转换成另一种数据类型的过程称为类型转换。一共分为两种,分别是隐式类型转换和显示类型转换。

显示类型转换又称为强制类型转换。

什么是隐式类型转换?指将一个较小范围的数据类型转换为较大范围的数据类型时,编译器会自动完成类型转换,这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。

举个例子,肯德基的咖啡分为小杯和大杯两种,这就是两种不同的数据类型,代表量程不同。就算将整个小杯里面的咖啡倒进大杯里,也丝毫没有压力,不会导致咖啡溢出,因为大杯的容量大呀。所以这种操作就是安全的,在计算机里面,这样的操作就是隐式转换。

反过来,将大杯里的咖啡全部倒进小杯里呢?不一定是安全的。如果大杯里只装了一点点咖啡,小杯可能装得下,如果装得多呢,可能会杯满则溢。所以这样的操作是不安全的,如果硬要这样做,那就只能是强制转换了。

理解这一点后,我们分别以byte、short和int为例。因为byte的范围是0-255,而short的范围是-32768到+32767之间,int的范围是-2147483648到2147483647之间。很明显,byte就是小杯,short就是中杯,int就是大杯。

byte small = 255;
 
 short medium = small;
 
 int large = medium;
 
 Console.WriteLine($"small = {small}");
 
 Console.WriteLine($"medium = {medium}");
 
 Console.WriteLine($"large = {large}");

输出结果

small = 255
medium = 255
large = 255

结果分析

我们声明并初始化了一个small变量,变量的值为255,然后声明了short型的medium 变量和int型的large 变量,将small的值赋值给medium,将medium的值赋值给large,编译器都没作任何提示。但实则发生了隐式类型转换,就是将byte型隐式转换成了short型,将short型隐式转换成了int型。

再观察下面的例子

隐式转换与显式转换_类型转换

这时我们反过来,先定义一个int型的变量large,然后定义short型的变量medium,并将large的值赋值给medium时,编译器会提出警示:无法将类型"int”隐式转换为"short"。存在一个显示转换(是否缺少强制转换)。

那么显示转换该怎样实现呢?在需要强制转换的变量前面添加转换后的目标数据类型,用小括号即可。

int large = 255;
 
 short medium = (short)large;
 
 byte small = (byte)medium;
 
  
 
 Console.WriteLine($"large = {large}");
 
 Console.WriteLine($"medium = {medium}");
 
 Console.WriteLine($"small = {small}");

输出结果

large = 255
medium = 255
small = 255

强制转换的缺点,就是数据可能损失精度。观察下面的例子

double d = 456.789;
 
 int i;            
 
 i = (int)d;// 强制转换 double 为 int
 
 Console.WriteLine($"d = {d}");
 
 Console.WriteLine($"i = {i}");

输出结果

d = 456.789
i = 456

纵然456.789符合四舍五入法则,发生强制转换后,结果并不是457,而是456。直接将小数点砍掉,保留整数变成int型。

当前课程源码下载:(注明:本站所有源代码请按标题搜索)
文件名:041-隐式数据转换与显示数据转换
链接:https://pan.baidu.com/s/1Bq2lX7cruUbklLwgjGggSw
提取码:byte

——重庆教主 2024年1月22日