C# Checked 数据溢出的显性检查官 温故而知新

    在C#中,checked 是一个关键字,用于显式地启用溢出检查。也就是说,当你进行整数运算时,如果结果超出了数据类型的范围,checked 会抛出异常,帮助你捕获溢出错误。

    1. 为什么使用 checked

    通常情况下,C# 的整数运算(如 intlong 类型)不会自动检查溢出。如果发生溢出,结果会以“环绕”的方式处理,而不会抛出异常。例如,int 类型的最大值是 2147483647,如果你在它的基础上加 1,结果会变成 -2147483648,而不会有任何警告。

    但如果使用了 checked,在发生溢出时会抛出一个 OverflowException,这有助于发现和调试程序中的溢出问题。

    2. 使用 checked 关键字

    示例1:checked

    可以将一段代码块放入 checked 中,确保这个块里的所有整数运算都会进行溢出检查。

    int a = int.MaxValue;

    try
    {
        checked
        {
            int b = a + 1;  // 这里会抛出 OverflowException 异常
        }
    }
    catch (OverflowException ex)
    {
        Console.WriteLine("Overflow occurred: " + ex.Message);
    }

    在这个例子中,int a = int.MaxValuea + 1 会导致溢出,但由于我们在 checked 块内,这个溢出会抛出异常,而不会导致意外的结果。

    示例2:checked 表达式

    也可以只对单个表达式使用 checked

    int a = int.MaxValue;
    int result = checked(a + 1);  // 会抛出 OverflowException 异常

    3. unchecked 关键字

    相反地,C# 也提供了 unchecked 关键字,它可以显式地关闭溢出检查。如果你确定某些运算不需要检查溢出(比如对性能有要求的场景),你可以使用 unchecked

    int a = int.MaxValue;
    int result = unchecked(a + 1);  // 不会抛出异常,结果是负数
    Console.WriteLine(result);  // 输出:-2147483648
     

    4. 默认溢出检查设置

    • 默认情况下,C# 编译器对整数运算不会启用溢出检查。但是,你可以在项目的编译设置中选择启用全局溢出检查(例如在编译器选项中打开 checked 选项)。
    • checked 关键字只会在你明确需要时为特定代码段启用溢出检查。

    总结

    • checked 关键字用于启用整数溢出检查,如果溢出发生,会抛出 OverflowException
    • unchecked 关键字则用于显式地关闭溢出检查,即使溢出发生也不会抛出异常。
    • checked 对于避免意外的数据损坏和调试整数溢出问题非常有用,尤其在处理可能接近数据类型边界的运算时。
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值

    举报

    选择你想要举报的内容(必选)
    • 内容涉黄
    • 政治相关
    • 内容抄袭
    • 涉嫌广告
    • 内容侵权
    • 侮辱谩骂
    • 样式问题
    • 其他
    点击体验
    DeepSeekR1满血版
    程序员都在用的中文IT技术交流社区

    程序员都在用的中文IT技术交流社区

    专业的中文 IT 技术社区,与千万技术人共成长

    专业的中文 IT 技术社区,与千万技术人共成长

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    客服 返回顶部

    登录后您可以享受以下权益:

    ×