值类型的显示/隐式转换和算术溢出检查

(显示/隐式)转换

编译器能够在基元类型之间进行隐式或显示转换

Int32 i = 5;
Int64 l 
= i;    // 从Int32到Int64的隐式转换
如果两个类型之间的转换是"安全"的(安全是指转换不会造成数据丢失),那么C#允许在他们之间进行隐式转换


如果转换存在潜在的"安全"(转换会引起丢失精度或数量级),C#要求进行显示转换,如
Single s = 5.55;
Int32 i1 
= (Int32) s; // 从Single到Int32的显式转换



Checked 与 Unchecked 基元类型操作

Byte b = 100;
= (Byte) (b + 200);    //运算溢出,结果为44
默认情况下CLR不检查溢出,可以通过增加/checked+编译器命令开关或checked{}语句打开溢出检查,当检查到有溢出时会抛出
OverflowException
= checked((Byte) (b + 200));    //抛出 OverflowException
下面代码具有同样功能:
checked {
    Byte b 
= 100;
    b 
+= 200;
}


* System.Decimal是一个特殊的类型, Checked 和 Unchecked对他不起作用
posted @   蛤蟆  阅读(471)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示