类型转换

一、c#类型转换可以分为两大类:一类是同一类型转换(Cast),另一类是不同类型转换(Convert)。

   (一)同一类型转换(Cast)可分为两种:

      (1)隐式转换:如果当目标类型一定能满足源类型转换过去后的要求的话就是隐式转换。

      (2)显示转换(强制转换):如果当目标类型不一定能满足源类型转换过去后的要求的话就需要显示转换(程序员自已负责)。

具体解释参考下图:

(二)不同类型转换:Convert

二、具体实例

  <1>同一类型数据转换实例:

      功能段1:怎样打印数据类型的范围

       功能段2:隐式转换

       功能段3:强制转换(byte)

  1. namespace Cast入门  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             #region 怎样打印数据类型的范围  
  8.             Console.WriteLine("int的最大值是{0},最小值{1}",int.MaxValue,int.MinValue);  
  9.             Console.WriteLine("byte的最大值是{0},最小值{1}",byte.MaxValue,byte.MinValue);  
  10.             //int i =99999999999999999;   错误:99999999999999999超出int整数范围  
  11.             #endregion  
  12.  
  13.             #region    隐式转换  
  14.             byte b = 3;  
  15.             int i = b;   //(一个小的范围里的数放在一个大的范围里一定会放下的,这就好比小容器一定能放在大容器里)隐式转换  
  16.             Console.WriteLine(i);  
  17.             #endregion  
  18.  
  19.             #region   强制转换(byte)  
  20.             //b = i;    (一个大的范围里的数放在一个小的范围里可能会放不下,编译器不能保证一定能转换成功。)  
  21.             b=(byte)i;   //强制转换  
  22.             Console.WriteLine(b);  
  23.   
  24.             //注意:标byte与不标byte的区别  
  25.   
  26.             i = 2;  
  27.             b = i;                     //不标上byte,程序报错。  
  28.             Console.WriteLine(b);  
  29.   
  30.             i = 2;                        
  31.             b = (byte)i;                //标上byte,程序不报错了,但程序员来负责  
  32.             Console.WriteLine(b);  
  33.   
  34.             //注意:标byte与不标byte的区别  
  35.   
  36.             i = 2000;  
  37.             b = i;                      //不标上byte,程序报错.  
  38.             Console.WriteLine(b);  
  39.   
  40.             i = 2000;  
  41.             b = (byte)i;                //标上byte,程序不报错,错误程序员来负责。  
  42.             Console.WriteLine(b);  
  43.             #endregion  
  44.   
  45.             Console.ReadKey();  
  46.         }  
  47.     }  
  48. }  

注意:在隐式转换中注意标注byte,它做代表的意思是:强制转换,程序不再报错,转换结果程序员自己负责。

<2>不同类型数据转换实例:

  1. namespace Convert转换  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             string s = "123";  
  8.             // i = (int)s;       //不能在string和int之间进行强制类型转换,只能用convert  
  9.             int i = Convert.ToInt32(s);      
  10.             Console.WriteLine(i);  
  11.             Console.ReadKey();  
  12.         }  
  13.     }  
  14. }  

 

<3>同一类型数据转换和不同类型数据转换实例的综合比较:

  1. namespace 类型转换  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             //同一类型数据之间的转换:隐式转换、显示转换(强制转换)  
  8.            byte b1 = 2;  
  9.            int i1 = b1;              //隐式转换(同一类型的数据,:小→大)  
  10.            Console.WriteLine(i1);  
  11.   
  12.            int i2 = 2000;  
  13.            byte b2 = (byte)i2;      // 强制转换(同一数类型:大→小)  
  14.            Console.WriteLine(b2);  
  15.            Console.ReadKey();  
  16.   
  17.   
  18.            // 不同类型数据之间的转换:convert  
  19.            string s = "123";  
  20.            // i = (int)s;       //不能在string和int之间进行强制类型转换,只能用convert  
  21.            int i = Convert.ToInt32(s);    //convert:不同类型数据之间的转换  
  22.            Console.WriteLine(i);  
  23.            Console.ReadKey();  
  24.         }  
  25.     }  
  26. }  


 总结(个人理解):

 Cast和convert两大类型转换的区别:

        Cast:同一类型的数据的转换,只是大小范围不同之间同一类型之间的转换(比如:byte类型和int类型之间的转换)

        (1) 小范围转换为大范围转换:隐式转换(同一类型的数据,:小→大)

        (2)大范围转换为小范围转换:强制转换(同一类型的数据:大→小)

        Convent:不同类型的数据的转换,不可以进行强制转换,只能用convert(比如:int类型和string类型之间的转换)

 


本文转载:CSDN博客