C#类型转换
类型转换就是把数据从一种类型转换为另一种类型,C#中有两种类型转换的形式
隐式类型转换:这些转换是C#默认的以安全方式进行的转换,比如从小的整数类型转换为大的整数类型或者是从派生类型转为基类
显示类型转换:这些转换是用户通过使用预定义的函数显示完成的,显示转换需要强制运算符
在上一节中Main方法中加上如下代码进行测试验证
//类型转换
Console.WriteLine("----------------类型转换--------------------");
double d = 123.789;
int i;
//强制把double类型转为int类型
i = (int)d;
Console.WriteLine("double 类型值:{0},转为int类型后值为:{1}", d, i);
具体的类代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Chapter01_001
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
/*
生成Circle类的对象
调用类的AcceptValue()方法为圆的半径赋值
调用类的Display()方法显示相关信息
*/
Circle c = new Circle();
c.AcceptValue(5);
c.Display();
//测试类型占用的字空间
Console.WriteLine("--------------测试类型占用的字空间----------------");
Console.WriteLine("Size of bool:\t\t{0}", sizeof(bool));
Console.WriteLine("Size of byte:\t\t{0}", sizeof(byte));
Console.WriteLine("Size of char:\t\t{0}", sizeof(char));
Console.WriteLine("Size of decimal:\t{0}", sizeof(decimal));
Console.WriteLine("Size of double:\t\t{0}", sizeof(double));
Console.WriteLine("Size of float:\t\t{0}", sizeof(float));
Console.WriteLine("Size of int:\t\t{0}", sizeof(int));
Console.WriteLine("Size of long:\t\t{0}", sizeof(long));
Console.WriteLine("Size of sbyte:\t\t{0}", sizeof(sbyte));
Console.WriteLine("Size of short:\t\t{0}", sizeof(short));
Console.WriteLine("Size of uint:\t\t{0}", sizeof(uint));
Console.WriteLine("Size of ulong:\t\t{0}", sizeof(ulong));
Console.WriteLine("Size of ushort:\t\t{0}", sizeof(ushort));
//类型转换
Console.WriteLine("----------------类型转换--------------------");
double d = 123.789;
int i;
//强制把double类型转为int类型
i = (int)d;
Console.WriteLine("double 类型值:{0},转为int类型后值为:{1}", d, i);
Console.ReadKey();
}
}
}
编译并执行后结果会显示如下:
可以看到上面的结果:从double类型的值转为int类型后其后的小数部分直接进行了截断只保留整数部分。
C#中类型转换方法
C#提供了一些内置的类型转换方法
序号 | 方法 | 描述 |
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位无符号整数类型 |
如下实例则进行验证使用内置转换函数进行转换
在原Main方法中添加如下代码
//使用内置函数进行类型转换
Console.WriteLine("----------------使用内置函数进行类型转换--------------------");
int i1 = Convert.ToInt32(d); //注意使用Convert转换类进行调用内置转换函数
Console.WriteLine("使用内置函数ToInt32把double 类型值:{0},转为int类型后值为:{1}", d, i1);
string str = d.ToString(); //转换为字符串时可以不用Convert转换类进行调用
Console.WriteLine("使用内置函数ToString把double 类型值:{0},转为string类型后值为:{1}", d, str);
具体整体代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Chapter01_001
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
/*
生成Circle类的对象
调用类的AcceptValue()方法为圆的半径赋值
调用类的Display()方法显示相关信息
*/
Circle c = new Circle();
c.AcceptValue(5);
c.Display();
//测试类型占用的字空间
Console.WriteLine("--------------测试类型占用的字空间----------------");
Console.WriteLine("Size of bool:\t\t{0}", sizeof(bool));
Console.WriteLine("Size of byte:\t\t{0}", sizeof(byte));
Console.WriteLine("Size of char:\t\t{0}", sizeof(char));
Console.WriteLine("Size of decimal:\t{0}", sizeof(decimal));
Console.WriteLine("Size of double:\t\t{0}", sizeof(double));
Console.WriteLine("Size of float:\t\t{0}", sizeof(float));
Console.WriteLine("Size of int:\t\t{0}", sizeof(int));
Console.WriteLine("Size of long:\t\t{0}", sizeof(long));
Console.WriteLine("Size of sbyte:\t\t{0}", sizeof(sbyte));
Console.WriteLine("Size of short:\t\t{0}", sizeof(short));
Console.WriteLine("Size of uint:\t\t{0}", sizeof(uint));
Console.WriteLine("Size of ulong:\t\t{0}", sizeof(ulong));
Console.WriteLine("Size of ushort:\t\t{0}", sizeof(ushort));
//类型转换
Console.WriteLine("----------------类型转换--------------------");
double d = 123.789;
int i;
//强制把double类型转为int类型
i = (int)d;
Console.WriteLine("double 类型值:{0},转为int类型后值为:{1}", d, i);
//使用内置函数进行类型转换
Console.WriteLine("----------------使用内置函数进行类型转换--------------------");
int i1 = Convert.ToInt32(d); //注意使用Convert转换类进行调用内置转换函数
Console.WriteLine("使用内置函数ToInt32把double 类型值:{0},转为int类型后值为:{1}", d, i1);
string str = d.ToString(); //转换为字符串时可以不用Convert转换类进行调用
Console.WriteLine("使用内置函数ToString把double 类型值:{0},转为string类型后值为:{1}", d, str);
Console.ReadKey();
}
}
}
编译运行结果如下:
注意:观察上面的结果可以发现,直接使用类型来转换时把double类型转int类型会把小数部分直接截断,但是使用内置函数ToInt32时则会做四舍五入的操作。