标签:异常 checked C# 抛出 float MaxValue int tathkDucmmsc 转会
title | author | date | CreateTime | categories |
---|---|---|---|---|
C# 强转会不会抛出异常 | lindexi | 2018-7-29 14:24:1 +0800 | 2018-4-4 16:24:2 +0800 | C# |
最近遇到一个小伙伴问我,从一个很大的数强转,会不会抛出异常。实际上不会出现异常。
最简单的代码是使用一个比 maxvalue 大的数,然后用它强转
long tathkDucmmsc = int.MaxValue ; tathkDucmmsc *= 2; int kuplStqfbbmx = (int) tathkDucmmsc; // -2
结果没有异常,只是拿到的值是 -2
但是因为默认是 unchecked 如果把上面的代码添加checked,那么就会出异常
checked { long tathkDucmmsc = int.MaxValue; tathkDucmmsc *= 2; int kuplStqfbbmx = (int) tathkDucmmsc; }
System.OverflowException:“Arithmetic operation resulted in an overflow.”
但是对于 float ,他的值就不是这样了
checked { double hcmzgSsby = float.MaxValue; hcmzgSsby *= 2; float djmmmkvawSswu = (float)hcmzgSsby; }
可以看到 djmmmkvawSswu 的值是 Infinity 不会出现异常,所以对于浮点数不要通过异常来判断强转是不是超过最大值。
那么如何判断 Infinity ? 使用float.IsInfinity或 double.IsInfinity 都可以判断。
标签:异常,checked,C#,抛出,float,MaxValue,int,tathkDucmmsc,转会 来源: https://blog.51cto.com/u_11283245/2951473
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。