在C#中有些数据类型可以转换成另一种数据类型。
如果是一种值类型转换为另一种值类型,一种引用类型转换为另一种引用类型,比较常见的转换方式是隐式转换和显示转换。当从低精度,小范围的数据类型转换为高精度,大范围的数据类型是,系统就会自动帮我们转换,也就是隐式转换。如果是将大范围类型的数据转换为小范围类型的数据,就必须使用强制转换,也就是显示转换。
如果是不同类型之间的相互转换,我们也可以通过其他的方法来进行转换。
例如,每种方法都有ToString方法,所以你可以把任何数据类型转换为字符串类型,语法是:要转换的类型.ToString();
(1),隐式转换
转换的条件:
1,两种类型兼容
例如:int 和 double兼容
2,目标类型大于源类型
例如:double > int
当系统帮我们自动转换时,是不会丢失精度。如果丢失精度,这个转换就不会自动完成。
例如:
static void Main(string[] args)
{
int i = 1;
double PI = 3.14;
double result = i + PI; //系统帮我们把int类型的i隐式转换为double类型
Console.WriteLine("结果是:{0}",result);
Console.ReadKey();
}
(2),显示转换
当需要丢失精度的转换时,系统就不会帮我们自动转换了,这时就需要程序员自己写代码完成转换。
转换语法:
(要转换成的数据类型名)待转换的值
例如:
static void Main(string[] args)
{
int i = 3;
double PI = 3.14;
int result = i + (int)PI; //强制将double类型的PI转换成int类型
Console.WriteLine("结果是:{0}",result);
Console.ReadKey();
}
注意:强制类型转换要求待转换的类型和目标类型必须都为数字。
下面两种转换是错误的:
string age =(int)console.readline();
int a = (int )”33”;
(3),利用convert类转换
Convert不在仅是内存级别的转换,而是考虑数据意义的转换。它是一个加工、改造的过程。
语法:
Convert.To转换后的类型(需要转换的变量)
例如:
利用Convert.ToInt(32)(待转字符串);
static void Main(string[] args)
{
string str = "123";
Try //需要注意的是,如果待转字符串不是一个数字或者其范围大于或小于
//Int32所表示的范围,转换就会报错
{
//利用conver类把string类型转换为int类型
int number = Convert.ToInt32(str);
Console.WriteLine("转换成功!结果是:{0}",number);
}
catch
{
Console.WriteLine("转换失败!");
}
Console.ReadKey();
(4),使用parse方法:
大部份预定义值类型都有这个静态方法,用来将相应的文本转化为相应的值类型。
最常用的两个parse方法:
1),将数字的字符串表示形式转换为int类型:
语法:
Int.parse(待转数字字符串);
例如:
static void Main(string[] args)
{
string str = "abc";
try //注意:要转换的类型必须是数字型的字符串,否则会报错
{
int number = int.Parse(str); //利用int.Parse();方法,把string类型转换为
//Int类型
Console.WriteLine("转换成功:{0}", number);
}
catch
{
Console.WriteLine("转换失败");
}
Console.ReadKey();
}
注意:待转类型不仅要是数字形式的字符串,而且还不能为空,更不能超出int所能表示的范围
2),第二种方法与第一种方式类似,所不同的是:此方法在转换失败时不引发异常
语法:
int.TryParse(待转换的字符串, out result);
注意: Result类型为int,如果转换成功,成功后的值将被存入到result,并输出。此方法有一个返回值,返回值类型为bool,如果成功转换了字符串,则为true,否则为false。
例如:
static void Main(string[] args)
{
string str = "123";
int number = 0;
//利用int.TryParse();方法将string类型转换为int类型
//如果转换成功,则返回true,并把值输出给number,否则返回false。
if (int.TryParse(str, out number))
{
Console.WriteLine("转换成功:{0}", number);
}
else
{
Console.WriteLine("转换失败!");
}
Console.ReadKey();
}
(5),其他转换用运算符:as
as运算符用于执行引用类型的显示类型转换。如果要转换的类型与指定类型兼容,转换就会成功;如果类型不兼容,则返回null。
语法:
表达式 as 类型
例如:
object obj = new object();
Socket soc = obj as Socket; //利用as 将object类型转换为Socket类型
注意: As运算符类似于类型转换,所不同的是,当转换失败时,as运算符将返回null,而不是引发异常。