导读:类型转换的分类 C#有两种转换数据类型的方式,隐式转换跟显式转换。1:隐式转换方式我们经常把一种数据类型转换为另一种数据类型,这就是...
类型转换的分类
C#有两种转换数据类型的方式,隐式转换跟显式转换。
1:隐式转换方式
我们经常把一种数据类型转换为另一种数据类型,这就是类型转换,比如以下代码:
byte b = 25;
byte a = 8;
byte sum;
sum = a + b;
如果在编译器里一定会会产生一个错误,Cannot implicitly convert type 'int' to 'byte' (不能把int隐式转换为byte类型)。原因是我们把两个Byte类型数据相加在一起时,会返回一个int类型的结果,而不是一个byte类型结果。这是因为byte中只能存储8位数据,所以把两个Byte相加就可能出现起出8位的数据,所以会出错。如果我们把sum 的类型换成int就不会出现问题了
byte b = 25;
byte a = 8;
int sum;
sum = a + b;
下面我提供一个可以隐式转换类型的表格大家做为参考吧
源类型 |
目的类型 |
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,ulong |
float,double,decimal |
float |
double |
char |
ushort,int,uint,long,ulong,float,double,decimal
|
以上表格是可以从源类型隐式转换为目的类型的类型,只要上面表格里面的都不需要显式的都转换类型.net会自动转换并不会出错。
2:显式转换方式
显式转换也可称之为强制转换,因为在此转换过程中是最容易出错的。一般语法如下:
long b = 25;
int a = (int)b;
这是把目的类型放在前面的小括号里面。
在显式的数据类型转换时很有可能出产生溢出比如:
long b = 3000000000;
int a = (int)b;
大家想一下会输出什么,
错误
3000000000
答案是:
-1294967296
大家可以动手试试
再看如下代码:
try
{
long b = 3000000000;
int a = checked((int)b);
}
catch (Exception)
{
throw;
}
其实在转换之前可以使用checked关键字来验证一下是否安全,checked关键字可以检查数据类型的转换是否安全。运行如上代码会出现如下异常:
算术运算导致溢出。
还有一种情况是数据丢失。比如:
// 第一种情况
double b = 10.1;
int a = (int)(b + 0.5);
//第二种情况
double b = 10.1;
int a = (int)(b);
想一下如上两种情况会输出什么。答案如下:
10
10
便是10,也就是说他会取一个最小的整数,而不会进行四舍五入,更不会有小数位,因为目标类型是int类型。这点大家一种要注意,如数字比较精确的地方一定不要使用哦!!!
ASCII转换
int b = 88;
char a = (char)(b);
上面代码会转出一个大写的X。也就是说int类型要可以直接通过char来转换为ASCII对应的字符。
下面咱们再看一种Parse方法的方式
string b = "105";
int a = int.Parse(b);
string b = "105.5";
int a = int.Parse(b);
看看上面会输出什么,答案是:
105
异常:输入字符串的格式不正确。
第二个会报错,在这种情况下是不会进行最小整数的,这点大家也要注意。对于Object类型我不得不提一下Tostring()方法了,所有的Object类型基本上都有一个toString()方法,这是系统重载过的,可以直接把类型转成String类型非常 方法比如:
int b = "105.5";
string a = b.ToString();
好了最后咱们一起来看一下Convert方法吧。相信这个大家一定都非常的熟悉了,我先提供一下这个类签名给大家看https://b5.mxunkeji.com/uploadfile/2014/0520/20140520051339969.txt
这个类是专门用来进行类型转化的用法如下:
string b = "105";
int a = Convert.ToInt32(b);
string e = "2013-05-01";
DateTime dt = Convert.ToDateTime(e);