视频讲解
类型转换是将一个值从一种数据类型更改为另一种数据类型的过程。例如,可以将string类型数据457转换为一个int类型,而且可以将任意类型的数据转换为string类型。
数据类型转换有两种方式,即隐式转换与显式转换。如果从低精度数据类型向高精度数据类型转换,则永远不会溢出,并且总是成功的;而把高精度数据类型向低精度数据类型转换,则必然会有信息丢失,甚至有可能失败,这种转换规则就像如图3.15所示的两个场景,高精度相当于一个大水杯,低精度相当于一个小水杯,大水杯可以轻松装下小水杯中所有的水,但小水杯无法装下大水杯中所有的水,装不下的部分必然会溢出。
图3.15 大小水杯转换类比数据类型转换的示意图
隐式类型转换就是不需要声明就能进行的转换,进行隐式类型转换时,编译器不需要进行检查就能自动进行转换。下列基本数据类型会涉及数据转换(不包括逻辑类型),这些类型按精度从“低”到“高”排列的顺序为byte < short < int < long < float < double,可对照图3.16,其中char类型比较特殊,它可以与部分int型数字兼容,且不会发生精度变化。
图3.16 自动转换的兼容顺序图
例如,将int类型的值隐式转换成long类型,代码如下:
有很多场合不能隐式的进行类型转换,否则编译器会出现错误,例如,下面的类型在进行隐式转换时会出现错误:
如果遇到上面类型之间的转换,就需要用到C#中的显式类型转换。显式类型转换也称为强制类型转换,它需要在代码中明确地声明要转换的类型。如果要把高精度的变量转换为低精度的变量,就需要使用显式类型转换。
显式类型转换的一般形式为:
其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。
例如,下面的代码用来把x转换为float类型:
通过显式类型转换,就可以解决高精度数据向低精度转换的问题,例如,将double类型的值4.5赋值给int类型变量时,可以使用下面的代码实现:
3.5.2节中讲解了使用“(类型说明符)表达式”可以进行显式类型转换,下面使用这种方式实现下面的类型转换:
按照代码的本意,i的值应该是3000000000,但在运行上面两行代码时,却发现i的值是–1294967296,这主要是由于int类型的最大值为2147483647,很明显,3000000000要比2147483647大,所以在使用上面代码进行显式类型转换时,出现了与预期不符的结果,但是程序并没有报告错误,如果在实际开发中遇到这种情况,可能会引起大的BUG,那么,在遇到这种类型的错误时,有没有一种方式能够向开发人员报告错误呢?答案是肯定的。C#中提供了Convert类,该类也可以进行显式类型转换,它的主要作用是将一个基本数据类型转换为另一个基本数据类型。Convert类的常用方法及说明如表3.5所示。
表3.5 Convert类的常用方法及说明
例如,定义一个double类型的变量x,并赋值为198.99,使用Convert类将其显式转换为int类型,代码如下:
下面使用Convert类的ToInt32对本节开始的两行代码进行修改,修改后的代码如下:
再次运行这两行代码,则会出现如图3.17所示的错误提示。
图3.17 显式类型转换的错误提示
这样,开发人员即可根据图3.17中的错误提示对程序代码进行修改,避免程序出现逻辑错误。