2.5 类型转化

在数据类型中曾介绍,“5”、‘5’和5是3个不同的数据类型,其中,只有5能参与数据的数学运算。编译器编译程序运行时需要确切地知道数据类型,所以在实际开发中,若需要将“5”和‘5’作为整型数据参与运算,则需要将“5”和‘5’先改变数据类型,使其变成5,再进行运算。

本节介绍各个数据类型之间的转换,包括基本数据类型间的显式转换和隐式转换,以及字符串和基本数值类型之间的转换。

2.5.1 隐式类型转换

不需要进行声明的转换就叫隐式类型转换,换句话说,就是不需要缩小其存储空间,并能直接转换的,可以直接执行运算而不需要另外进行转换。

这样的情况必须是将范围小的类型转换为范围大的类型。如将int类型转换为double、long、decimal或float类型,将long类型转换为float或double类型等。如表2-6列出了隐式类型的转换表。

表2-6 隐式类型转换表

在表2-6中,从int、uint、long、ulong到float,以及从long或ulong到double的转换可能会导致精度损失,但是不会影响它的数量级,而且隐式转换不会丢失任何信息。隐式转换的使用,如练习2-4所示。

【练习2-4】

定义int类型的变量num1和num2,将两个变量的值赋给double类型的变量并输出。这两个数的乘积是int类型,将乘积赋值给double类型的变量res,输出res的值,使用代码如下:

int num1 = 4;
int num2 = 8;
double dou1 = num1;
double dou2 = num2;
double res = num1 * num2;
Console.WriteLine("dou1值为:{0}", dou1);
Console.WriteLine("dou2值为:{0}", dou2);
Console.WriteLine("res值为:{0}", res);

2.5.2 显式类型转换

显式类型转换也被称作强制类型转换,它需要在代码中明确地声明要转换的类型。显式类型转换可以将取值范围大的类型转换为取值范围小的类型。如表2-7列出了需要进行显式类型转换的数据类型。

表2-7 显式类型转换表

C#中使用强制类型进行转换时有两种方法:一种是使用括号(),在括号()中给出数据类型标识符(即强制转换的类型),在括号外要紧跟转换的表达式;另一种是使用Convert关键字进行数据类型的强制转换,如练习2-5所示。

【练习2-5】

将double类型的变量转化为float类型和int类型,如定义双精度的变量dou值为15.123456,分别转化float类型和int类型,输出原值和转化后的值,代码如下:

double dou = 15.1234567;
float flo = (float)dou;
int intnum=(int)dou;
Console.WriteLine("双精度:{0}", dou);
Console.WriteLine("浮点数:{0}",flo );
Console.WriteLine("整型值:{0}", intnum);

运行上述代码,其结果如图2-6所示。双精度数据的值被四舍五入,原值被强制改变。若是将float类型和int类型转化为double类型,则可以直接使用隐式转化,而不需要考虑数据值的变化。

图2-6 显式类型转化

2.5.3 字符串类型的转换

显式类型转换和隐式类型转换主要是对数值之间的转换,本节介绍将字符串转化为int、double或float类型。

字符串类型转换为其他类型时有两种方法:一种是使用parse()方法;另外一种是使用Conver类中的方法进行转换。如表2-8列出了Convert类的常用转换方法。

表2-8 Convert类的常用转换方法

在字符串转化中,最常用的是字符串和数学数据之间的转化。如将字符串转化为能够执行数学运算的数据,参与到数学运算中,如练习2-6所示。

【练习2-6】

定义字符串类型的两个值,分别使用字符串类型相加、将它们转化为整型数据相加,输出相加的结果,代码如下:

static void Main(string[] args)
{
    string num1 = "100";
    string num2 = "67";
    string nums = num1 + num2;
    int numi = Convert.ToInt32(num1) + Convert.ToInt32(num2);
    Console.WriteLine("两个字符串的和:{0}",nums);
    Console.WriteLine("两个整型数的和:{0}", numi);
    Console.Read();
}

运行结果如下所示:

两个字符串的和:10067
两个整型数的和:167

由上述结果可以看出,作为字符串类型时,两个变量的相加结果,相当于将两个字符串中的字符组合在一起,而转化为整型后,其相加结果为数学运算中的相加。

注意

将字符串转换为其他类型时该字符串必须是数字的有效表示形式。例如,用户可以把字符串“32”转换为int类型,却不能将字符串“name”转换为整数,因为它不是整数有效的形式。