类型强制转换

不知道大家注意到没有,.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  
原文地址:https://www.cnblogs.com/shengel/p/863723.html