前言
上一课中我们讲到了数据类型,在实际运用过程中,会有很多变量类型需要进行转换的场景,这时候我们就需要用到类型转换。类型转换(Type Conversion)是将一个数据类型转换为另一个数据类型的过程,类型转换包括隐式转换、显式转换和常见的类型转换方法
1.隐式转换(Implicit Conversion)
隐式转换是指在不需要显式指定的情况下,编译器自动完成的转换,这种转换通常发生在不丢失数据的情况下,即从小范围的数据类型转换为大范围的数据类型。
图1 隐式转换关系
2.显式转换(Explicit Conversion)
显式转换是指将一个较大范围的数据类型转换为较小范围的数据了形式,或将一个对象转换为另一个对象时,需要使用强制类型转换符号进行显式转换。显式转换也可称为强制类型转换。
ushort shortFeild = 72;
int num;
shortFeild = num; //会报错
shortFeild = (ushort)num;
3.类型转换方法
序号 | 方法 | 描述 |
1 | ToBoolean | 如果可以的话,把类型转换为布尔型 |
2 | ToByte | 把类型转为字节类型 |
3 | ToChar | 如果可能的话,吧类型转换为单个Unicode字符类型 |
4 | ToDateTime | 把类型(整数或字符串)转换为日期-时间结构 |
5 | ToDecimal | 把浮点型或整数类型转换为十进制类型 |
6 | ToDouble | 把类型转换为双精度浮点型。 |
7 | ToInt16 | 把类型转换为 16 位整数类型 |
8 | ToInt32 | 把类型转换为 32 位整数类型。 |
9 | ToInt64 | 把类型转换为 64 位整数类型。 |
10 | ToSbyte | 把类型转换为有符号字节类型。 |
11 | ToSingle | 把类型转换为小浮点数类型。 |
12 | ToString | 把类型转换为字符串类型。 |
13 | ToType | 把类型转换为指定类型。 |
14 | ToUInt16 | 把类型转换为 16 位无符号整数类型。 |
15 | ToUInt32 | 把类型转换为 32 位无符号整数类型。 |
16 | ToUInt64 | 把类型转换为 64 位无符号整数类型。 |
这些方法是定义在System.Convert类中,使用时需要包含System,他们提供了一种安全的方式执行类型转换,因为它可以处理Null值,并且如果转换不能进行则会抛出异常。
string str = "123";
int number = Convert.ToInt32(str); // 转换成功,number为123
4.Parse方法
Parse方法用于将字符串转换为对应的数据类型,失败会抛出异常
string str = "123.45";
double d = double.Parse(str);
5.TryParse方法
类似于Parse,但它不会抛出异常,而是会返回一个布尔值指示转换是否成功
string str = "123.45";
double d;
bool success = double.TryParse(str, out d);
if (success) {
Console.WriteLine("转换成功: " + d);
} else {
Console.WriteLine("转换失败");
}
总结:内置的类型转换方法主要通过以下几种方式实现:隐式转换、显式转换(强制转换)、使用 Convert 类的方法、Parse 方法和 TryParse 方法,这些方法广泛应用于不同数据类型之间的转换。进行类型转换时需要注意以下几点:
- 隐式转换只能将较小范围的数据类型转换为较大范围的数据类型,不能将较大范围的数据类型转换为较小范围的数据类型;
- 显式转换可能会导致数据丢失或精度降低,需要进行数据类型的兼容性检查;
- 对于对象类型的转换,需要进行类型转换的兼容性检查和类型转换的安全性检查。