不知道大家注意到没有,.Net几种类型转换的方式,实现的机制好象不太一样
//一种
double a=12.3;
int b=(int)a;
--通过语法检查,执行结果是12
//二种
double a=12.3
int b=Int32.Parse(a.ToString())
--通过语法检查,执行出错,异常信息:输入的字符串格式不正确
//三种
double a=12.3
int b=(int)new TypeConvert().ConvertTo(a,typeof(int))
--通过语法检查,执行出错,异常信息:类型Int不能转换为double
//四种
double a=12.3
int b=a as int
--编译通不过
通过上面几个示例的描述,我们看出采用不同的方法进行类型转换的效果明显不同,那我们平常在编程当中,到底应该采用那种方式进行类型的转换呢?为什么同样的输出会有那么不同的输出,他们的内部到底是怎么进行转换的.不知道有没有人对此进行探索?
TypeConvert应该在什么时候来使用?
后面两个其实是一个意思,基本类型是不能用as来转换的,as其实是拆箱
int b=(int)a;
这个和c里面是一个意思,截取整数,12.99会变成12
int b=Int32.Parse(a.ToString())
a.ToString返回"12.3",带小数的字符串转换的时候会报错,再说这个画蛇添足了
int.Parse是用来把字符串转换成整形的
还有一种Convert.ToInt32()
这个会四舍五入,比如12.99会变成13
如1.0000类型的数据必须经过2次装箱才能转化为整型的 1
如果直接进行转化的话就会报错:
string str = "1.0000";
int IntConvert = Convert.ToInt32(str );
就会报错
而:
string str = "1.0000";
double douConvert = double.Parse(str);
int IntConvert = Convert.ToInt32(douConvert);
就OK