一、类型转换概念
C# 是一门强类型语言,对类型要求比较严格,但是在一定的条件下也是可以相互转换的,
如将 int 型数据转换成 double 型数据。
C# 允许使用两种转换方式:隐式类型转换和显式类型转换。
(1)、 隐式类型转换
隐式类型转换是 C# 默认的以安全方式进行的转换,不会导致数据丢失。例如,从小的整数
类型转换为大的整数类型,从派生类转换为基类。
隐式转换主要是在整型、浮点型之间的转换,将存储范围小的数据类型直接转换成存储范围
大的数据类型。
示例代码如下:
1 int a = 100;
2 double d = a; //将int类型转换为double类型
3 float f = 3.14f;
4 d = f; //将float类型转换为double类型
(2).隐式数值转换包括以下几种:
从 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 类型。
从 ulong 类型到 float,double,或 decimal 类型。
从 char 类型到 ushort,int,uint,long,ulong,float,double,或 decimal 类型。
从 float 类型到 double 类型。
注意:隐式数值转换实际上就是从低精度的数值类型到高精度的数值类型的转换。
(3)、显式类型转换
显式类型转换,即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据
丢失。
强制类型转换主要用于将存储范围大的数据类型转换成存储范围小的,但数据类型需要兼
容。
强制类型转换的语法如下:
1 数据类型变量名 = (数据类型) 变量名或值;
举例如下:
1 double dbl_num = 12345678910.456;
2 int k = (int) dbl_num ;//此处运用了强制转换
二、数据类型转换方法
1、Parse 方法
C# Parse 方法用于将字符串类型转换成任意基本类型,具体的语法形式如下。
1 基本数据类型.Parse(字符串类型的值);
这里要求等号左、右两边的数据类型兼容。
举例如下:
1 static void Main(string[] args)
2 {
3 Console.WriteLine("请输入一个数字:");
4 string value = Console.ReadLine();
5
6 int num = int.Parse(value);
7
8 num++;
9
10 Console.WriteLine("输入的数字计算之后等于:{0}", num);
11 }
2、Convert方法
Convert 方法是数据类型转换中最灵活的方法,它能够将任意数据类型的值转换成任意数据
类型,前提是不要超出指定数据类型的范围。
具体的语法形式如下:
1 数据类型 变量名 = convert.To数据类型(变量名);
这里 Convert.To 后面的数据类型要与等号左边的数据类型相匹配。
Convert 类常用的类型转换方法如下表所示:
方法 说明
Convert.ToInt16() 转换为整型(short)
Convert.ToInt32() 转换为整型(int)
Convert.ToInt64() 转换为整型(long)
Convert.ToChar() 转换为字符型(char)
Convert.ToString() 转换为字符串型(string)
Convert.ToDateTime(
)
转换为日期型(datetime)
Convert.ToDouble() 转换为双精度浮点型(double)
Conert.ToSingle() 转换为单精度浮点型(float)
举例如下:
1 static void Main(string[] args)
2 {
3 float num1 = 82.26f;
4 int integer;
5 string str;
6 integer = Convert.ToInt32(num1);
7 str = Convert.ToString(num1);
8 Console.WriteLine("转换为整型数据的值{0}", integer);
9 Console.WriteLine("转换为字符串{0},",str);
10 }
三、拆箱和装箱
装箱:将值类型转换为引用类型的操作。
拆箱:相应地将引用类型转换成值类型。
利用装箱和拆箱功能,可通过允许值类型的任何值与 Object 类型的值相互转换,将值类型
与引用类型链接起来。
举例如下:
1 int val = 100;
2 object obj = val;
3 Console.WriteLine("对象的值 = {0}", obj);
4 //这是一个装箱的过程,是将值类型转换为引用类型的过程
5
6 int num = (int)obj;
7 Console.WriteLine("num: {0}", num);
8 //这是一个拆箱的过程,由引用类型转换为值类型的过程
举例如下:
1 static void Main(string[] args)
2 {
3 int num = 5;
4
5 float fNum = 5.5f;
6
7 string str = "装箱测试";
8
9 PrintObject(num,1);
10 PrintObject(fNum,2);
11 PrintObject(str,3);
12 }
13
14 static void PrintObject(object obj,int type)
15 {
16 switch(type)
17 {
18 case 1:
19 int value = (int)obj;
20 Console.WriteLine("Object 的值为整型:{0}", ++value);
21 break;
22 case 2:
23 float fValue = (float)obj;
24 Console.WriteLine("Object 的值为浮点型:{0}", ++fValue);
25 break;
26 case 3:
27 string str = obj.ToString();
28 Console.WriteLine("Object 的值为字符串:{0}", str);
29 break;
30 }
31 }