C#四部曲入门——类型转换和异常捕获
一.类型转换
类型转换:不同数据类型之间的相互转换
1.隐式转换
不同类型的自动转换(大类型装小类型)
(1)相同大类型之间的转换
有符号的类型:long —> int —>short —>sbyte
long l = 1;
int i = 1;
short sh = 1;
sbyte sb = 1;
//隐式转换,int类型隐式转换为了long
l = i;
//可以用大范围装小范围的类型(隐式转换)
//不能用小范围类型去装大范围类型
//i = l;
//也就是说大范围的数不能隐式转换为小范围的数
#region 可转换类型
l = i;
l = sh;
l = sb;
i = sh;
i = sb;
sh = sb;
#endregion
//这些都是大类型装小类型,其他的都不可以
同理:
无符号的类型:ulong —> uint —> ushort —> byte
浮点型:double —> float
但是:decimal类型无法用隐式转换的形式去存储double和float类型
特殊类型,不存在隐式转换。
(2)不同大类型之间的转换
①有符号和无符号之间的转换
//有符号类型
sbyte sb = 1;
short sh = 1;
int i = 1;
long l = 1;
//无符号类型 是不能装负数的
byte b = 1;
ushort ush = 1;
uint ui = 1;
ulong ul = 1;
//无符号的不能装有符号的
//有符号的可以装无符号的
//所有有符号的数不能隐式转换为无符号的数
sh= b;
i = ush;
i = b;
l = ui;
l = ush;
l = b;
//而且无符号的数的范围不能超过有符号数的范围才可以隐式转换,如以上
②浮点型和整数(有、无符号)之间的转换
//整型
sbyte sb = 1;
short sh = 1;
int i = 1;
long l = 1;
byte b = 1;
ushort ush = 1;
uint ui = 1;
ulong ul = 1;
//浮点型
float f = 1;
f = sb;
f = sh;
f = i;
f = l;
f = b;
f = ush;
f = ui;
f = ul;
float f1 = 1000000000000000000000000000;
Console.Write(f1);
//同理decimal也可以
decimal de = sb;
所以,所有的浮点型都可以装载整型变量。也就是说所有的整型变量都可以隐形转换为浮点型。
double —> float —> 所有整型变量(有、无符号)
decimal —> 所有整型变量(有、无符号)
相反可得知,浮点型不可以隐形转换为整型变量。
③特殊类型和其他数据类型
bool没有办法和其他类型相互隐形转换
其他数据类型没有办法隐形转换为char类型
但是char类型可以隐形转换为整型和浮点型
bool bo = true;
char c = 'A';
string str = "1231";
//整型
sbyte sb = 1;
short sh = 1;
int i = 1;
long l = 1;
byte b = 1;
ushort ush = 1;
uint ui = 1;
ulong ul = 1;
//浮点型
float f = 1;
sh = c;
//范围在char字符的ASCII码值范围之内的不能隐形转换
Console.WriteLine(sh);
char隐形转换成的数据类型是一个ASCII码,由于计算机存储的是二进制,字符,中文,英文,标点符号在计算机中都对应一个ASCII码。
string类型无法与其他数据类型隐形转换。
2.显式转换
显式转换—>手动处理 强制转换
(1)括号强转
作用:一般情况下,将高精度的类型强制转换为低精度
语法:变量类型 变量名 = (变量类型)变量
注意:精度问题 范围类型
①相同大类的整型
//整型有符号
sbyte sb = 1;
short sh = 1;
int i = 1;
long l = 1;
sb = (sbyte)sh;
sh = (short)i;
i = (int)l;
Console.WriteLine(sb);
Console.WriteLine(sh);
Console.WriteLine(i);
//整型无符号
byte b = 1;
ushort ush = 1;
uint ui = 1;
ulong ul = 1;
b = (byte)ush;
ush = (ushort)ui;
ui = (uint)ul;
Console.WriteLine(b);
Console.WriteLine(ush);
Console.WriteLine(ui);
//浮点型
float f = 1.1f;
double d = 1.3242424242424242;
f = (float)d;
Console.WriteLine(f);
②不同类型之间转换
//有、无符号的整型
int i = -1;
uint ui = 1;
ui = (uint)i;
Console.WriteLine(ui);
//整型和浮点型
float f = 1.5f;
i = (int)f;
Console.WriteLine(i);
//char和数据类型
char c = 'A';
int i2 = 1;
c = (char)i2;
Console.WriteLine(c);
//bool和string类型
//无法将bool类型强制转换为string类型,以及无法将string类型强制转换为bool类型。
/*bool bo = true;
string str = "false";
string str1 = (string)bo;
bool bo1 = (bool)str;
Console.WriteLine(str1);
Console.WriteLine(bo1);*/
所以括号强转可能会出现范围问题造成异常
(2)Parse法
作用:把字符串类型转换为对应的类型
语法:变量类型.Parse(“字符串”)
注意:字符串必须能够转换为对应类型,否则报错
字符串的范围,必须是能被变量存储的。
//有符号类型
string str1 = "123";
int i = int.Parse(str1);
Console.WriteLine(i);
//无符号类型
string str2 = "321";
uint ui = uint.Parse(str2);
Console.WriteLine(ui);
//浮点型
string str3 = "1.23";
float f = float.Parse(str3);
Console.WriteLine(f);
//特殊类型
string str4 = "true";
bool bo = bool.Parse(str4);
Console.WriteLine(bo);
string str5 = "A";
char c = char.Parse(str5);
Console.WriteLine(c);
(3)Convert法
作用:各个类型之间相互转换。
语法:Convert.To目标类型(变量或常量)
注意:填写的变量和常量必须正确,否则出错
//转字符串
int a = Convert.ToInt32("12");
Console.WriteLine(a);
//浮点数,精度比括号强转好一点,会四舍五入
a = Convert.ToInt32(1.55f);
Console.WriteLine(a);
//bool类型
a = Convert.ToInt32(true);
Console.WriteLine(a);
a = Convert.ToInt32(false);
Console.WriteLine(a);
//char类型
a = Convert.ToInt32('A');
Console.WriteLine(a);
//有符号
sbyte sb = Convert.ToSByte("1");
short sh = Convert.ToInt16("1");
int i = Convert.ToInt32("1");
long l = Convert.ToInt64("1");
//无符号
byte b = Convert.ToByte("1");
ushort ush = Convert.ToInt16("1");
uint ui = Convert.ToInt32("1");
ulong ul = Convert.ToInt64("1");
//浮点型
float f = Convert.ToSingle("13.2");
double d = Convert.ToDouble("13.2");
decimal de = Convert.ToDecimal("13.2");
//特殊
bool bo = Convert.ToBoolean("true");
char c = Convert.ToChar("A");
string str = Convert.ToString(231313);
Console.WriteLine(sb);
Console.WriteLine(sh);
Console.WriteLine(i);
Console.WriteLine(l);
Console.WriteLine(b);
Console.WriteLine(ush);
Console.WriteLine(ui);
Console.WriteLine(ul);
Console.WriteLine(f);
Console.WriteLine(d);
Console.WriteLine(de);
Console.WriteLine(bo);
Console.WriteLine(c);
Console.WriteLine(str);
(4)其他类型转string类型
作用:拼接打印
语法:变量.tToString();
string str = 1.ToString();
Console.WriteLine(str);
str = true.ToString();
Console.WriteLine(str);
str = 'A'.ToString();
Console.WriteLine(str);
str = 1.2f.ToString();
Console.WriteLine(str);
//当我们进行字符串拼接时,就会自动调用toString()
Console.WriteLine("1234241" + 1 + true);
二.异常捕获
1.作用
通过对异常捕获的学习,可以避免代码出现错误时吗,程序卡死
//获取键盘输入的字符串
string str = Console.ReadLine();
int i = int.Parse(str);
2.基本语法
//必要部分
try
{
//把希望进行异常捕获的代码放大try中
//如果try里面的代码,报错了,不会让程序卡死
}
catch(Exception e)
{
//如果出错了运行 catch中的代码,来捕获异常
//catch(Exception e)具体报错跟踪,通过e得到 具体的错误信息
}
//可选部分
finally
{
//最后执行的代码,不管有没有出错都会执行的代码
}
注意:异常捕捉代码基本结构中,不需要加;在里面去写代码逻辑时,每一句代码才加;
3.实践
try
{
string str = Console.ReadLine();
int i = int.Parse(str);
Console.WriteLine(i);
}
catch
{
Console.WriteLine("请输入合法数字");
}
finally
{
Console.WriteLine("执行完毕");
}
更多推荐
所有评论(0)