using System; namespace Lesson8 { class program { static void Main(string[] args) { Console.WriteLine("显式转换"); // 显式转换=手动处理 强制转换 #region 知识点一 括号强转 //作用:一般情况下,将高精度类型转换为低精度类型 //语法:变量类型 变量名 = (目标类型)变量名; //注意:类型不兼容 精度问题 范围问题 //相同大类的整形 //有符号整形 sbyte sb = 1; short s = 1; int i = 40000; long l = 1; //s = i; //错误:类型不兼容 i = (int)l; //正确:手动转换 Console.WriteLine(i); s = (short)i;//正确但注意:超过了short的范围 Console.WriteLine(s); //无符号整形 byte b = 1; ushort us = 1; uint ui = 1; ulong ul = 1; ui = (uint)ul; //正确:手动转换 Console.WriteLine(ui); //浮点数 float f = 1.0f; double d = 1.123456789012345; f = (float)d; //正确:手动转换 Console.WriteLine(f);//注意:精度损失 //无符号和有符号之间的转换 uint ui2 = 1; int i2 = 1; //ui2 = i2; //错误:类型不兼容 ui2 = (uint)i2; //正确:手动转换 Console.WriteLine(ui2); i2 = -1; //负数 ui2 = (uint)i2; Console.WriteLine(ui2); //注意:负数转换为无符号整形时,结果是一个很大的数 //浮点数和整形之间的转换,会直接截断小数部分 i2 = (int)1.2f; Console.WriteLine(i2); //注意:小数部分被截断 //char和数值类型 char c = 'A'; //字符'A'的ASCII码是65 Console.WriteLine(c); int asciiValue = (int)c; //将字符转换为ASCII码 Console.WriteLine(asciiValue); //bool和string之间的转换,不能通过括号强转 bool bo = true; //int i3 = (bool)bo; 错误:bool不能直接转换为int string str = "123"; //i3 = int(str); 错误:string不能直接转换为int #endregion #region 知识点二 Parse方法 //作用:将字符串转换为其他类型 //语法:目标类型. Parse(字符串变量名); //注意:如果字符串格式不正确,会抛出异常,必须是能够转换的类型 //有符号 string str2 = "123"; int i3 = int.Parse(str2); //正确:字符串转换为整数 Console.WriteLine(i3); //i3 = int.Parse("fds"); 错误:字符串格式不正确,不是能够转换的类型,会抛出异常 //Console.WriteLine(i3); short s3 = short.Parse("4");//正确:字符串转换为短整数 Console.WriteLine(s3); //s3 = short.Parse("40000"); 错误:字符串格式不正确,超出了short的范围,会抛出异常 //Console.WriteLine(s3); //无符号 //规则相同 Console.WriteLine(byte.Parse("1")); Console.WriteLine(ushort.Parse("2")); Console.WriteLine(uint.Parse("3")); Console.WriteLine(ulong.Parse("4")); //浮点数 double f3 = double.Parse("1.23456789"); //正确:字符串转换为双精度浮点数 Console.WriteLine(f3); float f4 = float.Parse("1.23456789"); //正确:字符串转换为单精度浮点数 Console.WriteLine(f4); //特殊类型 bool bo2 = bool.Parse("true"); //正确:字符串转换为布尔值 Console.WriteLine(bo2); //char c3 = char.Parse(bo2); 错误:bool不能直接转换为char //string str3 = string.Parse(bo2); 错误:bool不能直接转换为string char c2 = char.Parse("A"); //正确:字符串转换为字符 Console.WriteLine(c2); #endregion #region 知识点三 Convert方法 //作用:更准确的将不同类型之间进行转换,支持更多类型的转换 //语法:Convert.To目标类型(变量名); //注意:如果转换失败,会返回默认值,不会抛出异常 //转换字符串 int a = Convert.ToInt32("123"); //正确:字符串转换为整数 Console.WriteLine(a); //a = Convert.ToInt32("fds"); 错误:字符串格式不正确,不是能够转换的类型,会抛出异常 a = Convert.ToInt32('A'); //正确:字符'A'的ASCII码是65 Console.WriteLine(a); //精度更准确 a = Convert.ToInt32(1.5f); //正确:数字转换为int,会四舍五入 Console.WriteLine(a); //特殊类型转换 a = Convert.ToInt32(true); //正确:bool转换为int,true为1,false为0 Console.WriteLine(a); //每一个类型都有对应的Convert方法 short s4 = Convert.ToInt16("123"); //正确:字符串转换为短整数 uint ui3 = Convert.ToUInt32("123"); //正确:字符串转换为无符号整数 long s5 = Convert.ToInt64("123456789"); //正确:字符串转换为长整数 sbyte sb5 = Convert.ToSByte("123"); //正确:字符串转换为有符号字节 float f5 = Convert.ToSingle("1.23456789"); //正确:字符串转换为单精度浮点数 double d5 = Convert.ToDouble("1.23456789"); //正确:字符串转换为双精度浮点数 decimal dec = Convert.ToDecimal("1.23456789"); //正确:字符串转换为十进制数 bool bo3 = Convert.ToBoolean("true"); //正确:字符串转换为布尔值 #endregion #region 知识点四 其他类型转string //作用:将其他类型转换为字符串,拼接打印 //语法:变量名.ToString(); string str6 = 1.ToString(); Console.WriteLine(str6); str6 = true.ToString(); Console.WriteLine(str6); str6 = 1.23456789f.ToString(); Console.WriteLine(str6); str6 = 'A'.ToString(); Console.WriteLine(str6); //拼接 Console.WriteLine("拼接后的字符串"+1+true);//1和true会被转换为字符串,结果是"1True" //eg: str6 = "123" + 1 + true + 1.254;//默认调用了ToString()方法 Console.WriteLine(str6); #endregion } } }