类型转换Cast和Convert
把源类型赋值给目标类型,两个类型不一致的时候会发生类型转换。a=b,b是源,a是目标。
隐式转换、显式转换。当目标类型一定能满足源类型转换过去后的要求的话就是隐式转换;如果当目标类型不一定能满足源类型转换过去后的要求的话就需要显式转换(程序员自己负责)。
比如:把中国人转换为人是隐式转换,把人转换为中国人则是显式转换(强制转换)
int i;//定义一个整型变量 byte s=100;//byte数据范围:0~255 i = s; //都是数据类型,int类型比byte 存储数据多 可以直接赋值, Console.WriteLine("s的值为:{0}",s);//输出s的值。 Console.WriteLine("i的值为:{0}",i);//输出i的值。 s = (byte)i;// byte类型 比int 类型存储数据少,前面必须强制转换。 可能发生溢出。
输出结果:
int i = 88888887;//定义一个整型变量 byte s;//byte数据范围:0~255 s = (byte)i;// byte类型 比int 类型存储数据少,前面必须强制转换。 可能发生溢出。 Console.WriteLine("s的值为:{0}", s);//输出s的值。 Console.WriteLine("i的值为:{0}", i);//输出i的值。
输出结果:
PS:byte s类型,已发生溢出,显示值为:“55”.正常值为:“88888887”。是由于byte最大支持到255。
Convert不再是内存级别的转换,而是考虑数据意义的转换。可以把姓名Convert成人。Convert是一个加工、改造的过程。
string s = "1111";//定义一个字符串变量s,赋值为:"1111"(看起来想数字。) int i = Convert.ToInt32(s);//将字符串s 转变成整型赋值给i i = i + 1;//i+1 赋值给i Console.WriteLine("i的结果为:{0}",i);//输出i的结果。 s = s + 1;//将s+1赋值给s Console.WriteLine("s的结果为:{0}", s);//输出s的结果。 Console.ReadKey();
输出结果:
PS:从结果可以看出,i是数字+1=1112,s是在1111后面+上8=11118。