0
点赞
收藏
分享

微信扫一扫

2018-7-29-C#-强转会不会抛出异常

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.IsInfinitydouble.IsInfinity 都可以判断。










举报

相关推荐

C++翁恺学习33-异常的抛出和捕捉

0 条评论