• 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 都可以判断。

    博客园博客只做备份,博客发布就不再更新,如果想看最新博客,请到 https://blog.lindexi.com/

    知识共享许可协议
    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名[林德熙](http://blog.csdn.net/lindexi_gd)(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我[联系](mailto:lindexi_gd@163.com)。
  • 相关阅读:
    php 验证码
    扫描登录
    正则表达式
    liunx 搭建svn
    jq
    spl_autoload_register()函数
    php函数操作文件
    配置nginx支持TP框架
    Object-c 访问控制
    Obiective
  • 原文地址:https://www.cnblogs.com/lindexi/p/12086110.html
Copyright © 2020-2023  润新知