3.2.2 类型转换
很多时候我们需要在各种类型的简单变量之间进行转换,也就是类别转换。一般类别转换分为如下几种。
- 隐式转换。不需要编写任何代码,由编译器自动进行的类型转换。如果某一种类型覆盖了另外一种类型的范围(比如byte类别是0~255之间的整数,完全被int型所覆盖),那么覆盖范围比较小的那个类型可以隐式转换到覆盖范围大的那个类型(byte可以隐式转换到int)。
以下代码是可行的。byte bData = 20;
int iAge = bData;
- 显式转换。明确要求编译器把某种类型转换为另外一种类型。要求比隐式转换适当放宽,只要是类型彼此之间具有一定的关系(比如都是数字)。如下的代码实现了显式转换。
int iAge = 20;
byte bData = (byte)iAge;
//由于char类型也是以数字存储,因此以下代码可行
int i = 10;
char c = (char)i;
在使用显式转换的时候要小心,如果转换超出类型的限制可能会发生截断或者溢出。int iAge = 454394509;
byte bData1 = (byte)iAge; //iAge=141,发生截断
byte bData2 = checked((byte)iAge); //进行溢出检查,出现溢出
double d = 1.23;
int i = (int)d; //i=1,发生截断
- 强制转换。上例我们看出,虽然20这个字符串存放的是一个数字,但是编译器是不知道它是不是一个数字的,有的时候我们需要强制进行转换。
string s = "20";
int i = Convert.ToInt16(s);
除了使用Convert类以外,我们还可以使用各种类型的Parse方法来从字符中转换成相应的类型。string s = "20";
int i = int.Parse(s);
很多时候我们需要把各种类型转换为字符串,除了可以使用Convert.ToString()方法外,还可以使用类型的ToString()方法转换。string s = "";
int i = 20;
s = i.ToString();
double d = 1.23;
s = d.ToString();