C#类型转换(隐式类型转换和强制类型转换)
类型转换是将一个值从一种数据类型更改为另一种数据类型的过程。
例如,C# 程序中可以将 string 类型数据“457”转换为一个 int 类型,也可以将任意类型的数据转换为 string 类型。
数据类型转换有两种方式,即隐式转换与强制转换(显式转换):
这种转换规则就像下图所示的两个场景:

图 1 大小水杯转换类比数据类型转换的示意图
高精度相当于一个大水杯,低精度相当于一个小水杯,大水杯可以轻松装下小水杯中所有的水,但小水杯无法装下大水杯中所有的水,装不下的部分必然会溢出。
下列基本数据类型会涉及数据转换(不包括逻辑类型),这些类型按精度从“低”到“高”排列的顺序为:

图 2 自动转换的兼容顺序图
其中 char 类型比较特殊,它可以与部分 int 型数字兼容,并且不会发生精度变化。
例如,将 int 类型的值隐式转换成 long 类型,代码如下:
例如,下面的类型在进行隐式转换时会出现错误:
如果遇到上面类型之间的转换,就需要用到 C# 中的强制类型转换。强制类型转换也被称为显式类型转换,它需要在代码中明确地声明要转换的类型。如果要把高精度的变量转换为低精度的变量,就需要使用强制类型转换。
强制类型转换的一般形式为:
例如,C# 程序中可以将 string 类型数据“457”转换为一个 int 类型,也可以将任意类型的数据转换为 string 类型。
数据类型转换有两种方式,即隐式转换与强制转换(显式转换):
- 如果从低精度数据类型向高精度数据类型转换,则永远不会溢出,并且总是成功的;
- 如果从高精度数向高精度数据类型转换,则永远不会溢出,并且总是成功的;
- 如果从高精度数据类型向低精度数据类型转换,则必然会有信息丢失,甚至有可能失败。
这种转换规则就像下图所示的两个场景:

图 1 大小水杯转换类比数据类型转换的示意图
高精度相当于一个大水杯,低精度相当于一个小水杯,大水杯可以轻松装下小水杯中所有的水,但小水杯无法装下大水杯中所有的水,装不下的部分必然会溢出。
C#隐式类型转换
隐式类型转换就是不需要声明就能进行的转换,进行隐式类型转换时,编译器不需要进行检查就能自动进行转换。下列基本数据类型会涉及数据转换(不包括逻辑类型),这些类型按精度从“低”到“高”排列的顺序为:
byte < short < int < long < float < double
可对照下图:
图 2 自动转换的兼容顺序图
其中 char 类型比较特殊,它可以与部分 int 型数字兼容,并且不会发生精度变化。
例如,将 int 类型的值隐式转换成 long 类型,代码如下:
int i = 927; // 声明一个整型变量i并初始化为927 long j = i; // 隐式转换成long类型
C#强制类型转换
有很多场合不能隐式地进行类型转换,否则编译器就会出现错误。例如,下面的类型在进行隐式转换时会出现错误:
- int 类型转换为 short 类型时,就会丢失数据;
- int 类型转换为 uint 类型时,就会丢失数据;
- float 类型转换为 int 类型时,就会丢失小数点后面的所有数据;
- double 类型转换为 int 类型时,就会丢失小数点后面的所有数据;
- 数值类型转换为 char 类型时,就会丢失数据;
- decimal 类型转换为其他数值类型时,decimal 类型的内部结构不同于整数和浮点数。
如果遇到上面类型之间的转换,就需要用到 C# 中的强制类型转换。强制类型转换也被称为显式类型转换,它需要在代码中明确地声明要转换的类型。如果要把高精度的变量转换为低精度的变量,就需要使用强制类型转换。
强制类型转换的一般形式为:
(类型说明符)表达式
其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如,下面的代码用来把 x 转换为 float 类型:(float)x通过强制类型转换,就可以解决高精度数据向低精度转换的问题。例如,将 double 类型的值 4.5 赋值给 int 类型变量时,可以使用下面的代码实现:
int i; i = (int)4.5; // 使用强制类型转换
相关文章
- C++类型转换:强制类型转换和隐式类型转换(附带实例)
- C#数据类型转换详解(隐式转换和显式转换)
- C++类型转换函数:将当前类的类型转换为其它类型
- C++类型转换(static_cast和dynamic_cast)
- C/C++类型转换的本质(经典之作)
- C++强制类型转换运算符(static_cast、reinterpret_cast、const_cast和dynamic_cast)
- C++ static_cast、dynamic_cast、const_cast和reinterpret_cast(四种类型转换运算符)
- C#数据类型转换
- C#数据类型转换(3种方法)
- C语言类型转换详解(自动类型转换和强制类型转换)