06-隐式转换
3.4.1 隐式转换
隐式转换就是系统默认的、不需要加以声明就可以进行的转换。在该过程中,编译器不需要对转换进行详细检查,就能安全地进行转换。例如,
01 short st=250;
02 int i=st; //将短整型隐式转换成整型
在C#引入var类型的变量之前,隐式转换仅存在于数值类型的数据之间。引入var类型之后,用var定义的变量可以实现隐式数据转换。
1.数值类型数据间的隐式转换
隐式数据类型转换适用于数值类型的数据之间,如整型数据(int)可以隐式转换为浮点型(float)和双精度型(double)数据,浮点型(float)可以隐式转换为双精度型(double)数据。隐式数据类型转换只有遵循如下表所示的规则才能实现。
| 类型 | 可转换为的类型 | | :----- | :----- | :----- | :----- | | sbyte | short、int、long、float、double 或 decimal | | byte | short、ushort、int、uint、long、ulong、float、double 或 decimal | | short | int、long、float、double 或 decimal | | ushort | int、uint、long、ulong、float、double 或 decimal | | int | long、float、double 或 decimal | | uint | long、ulong、float、double 或 decimal | | long | float、double 或 decimal | | char | ushort、int、uint、long、ulong、float、double 或 decimal | | float | double | | ulong | float、double 或 decimal |
从int、uint、long或ulong到float,以及从long或ulong到double的转换可能导致精度损失,但不会影响数量级。其他的隐式转换不会丢失任何信息。
2.var类型数据隐式转换
用var定义的变量的数据类型是由赋值的数据决定的。如var Name="Johnson",此时变量Name就是字符串类型进行了隐式转换。如下所示。
01 var intNum=250;
02 int i=intNum; //var型变量intNum隐式转换成整型
03 var Name="Johnson";
04 string strName=Name; //var型变量Name隐式转换成string型