【C#学习日记】类型转换


如果有机会,想陪你们再来一次

C#中有两种类型的类型转换,隐式类型转换显式类型转换
隐式转换是系统默认的,不需要加以声明就可以进行的转化,不会造成数据丢失
显式转换即强制类型转换,可能会造成数据的丢失
显式转换包括所有的隐式转换(即把任何系统允许的隐式转化写成显式转换都是允许的)

1 隐式类型转换

1.1 隐式数值转换

实际上就是低精度的数值类型向高精度的数值类型转换。特殊的,不存在char类型的隐式转换,这意味着其他整型值不能自动转换为char类型

1.2 隐式枚举转换

隐式枚举转换允许将十进制的整数0抓换为任意枚举类型

1.3 隐式引用转换

包括:
1)任何引用类型 → object类型
2)子类类型 → 父类类型
3)类类型s → 接口类型t ,其中类s实现了接口t
4)接口类型s → 接口类型t , 其中t是s的父接口
5)满足一定条件下的 , 数组类型t → 数组类型s

2 显式类型转换

需要用户明确指定转换的类型。不总是能够成功,常常引起数据丢失和异常。

2.1 显式数值转换

包括:
1)一种整型 → 另一种整型。编译器将针对转换进行溢出检测,如果没有发生溢出,则转换成功,否则抛出一个OverflowException异常。这种检测还与编译器中是否设定了checked选项有关。
2)float / double /decimal → 整型。舍入到最接近的整型作为转换的结果。如果这个整型值超出了目标类型的值域,则抛出一个OverflowException异常。
3)double → float。double值通过舍入取最接近的float值。如果这个值太小,结果将变成正0或负0,如果这个值太大,将变成正无穷或负无穷。如果原double值是Nan,则转换结果也是Nan。
4)float / double → decimal。原值将转换成小数形式并通过舍入取到小数点后28位(如果有必要的话)。如果原值太小,则结果为0,如果太大以致不能用小数表示,或是无穷和Nan,则抛出InvalidCastException异常。
5)decimal → float / double。小数的值通过舍入取最近的值。这种转换可能会丢失精度,但不会引起异常。

2.2 显式枚举转换

实际上是枚举类型的元素类型与相应类型之间的隐式或显式转换

2.3 显式引用转换

显示引用转换发生在引用类型之间,需要在运行时检测以确保正确。
为了确保显示引用转换的正常执行,要求原变量必须是null或者它所引用的对象的类型可以被隐式引用转换为目标类型。否则显式引用转换失败,将抛出一个InvalidCastException异常

包括:
1)object → 任意引用类型
2)类类型S → 类类型T,其中s是T的父类
3)基类型S → 接口类型T,其中S不是密封类,而且没有实现T
4)接口类型S → 类类型T,其中T不是密闭类,而且没有实现S
5)接口类型S → 接口类型T,其中S不是T的子接口
6)满足一定条件下的 , 数组类型S → 数组类型T

显示转换的方法:
1.b = (Type) a;
2.Convert类下To开头的静态方法,e.g. Convert.ToInt16(a)//a为null时返回0
3.基本数字类型和字符串间的转换:
a)static Single Parse(string s) //s为null时抛出异常
b)static bool TryParse(string s , out Single result) //s为null时返回false,reslut=0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值