美文网首页
C# 溢出检测checked 与 unchecked

C# 溢出检测checked 与 unchecked

作者: Memoyu | 来源:发表于2019-05-29 15:53 被阅读0次

    概述

      首先,我们看一下这些数据类型的取值范围,我们举int为例,它的取值范围是(-2147483648~2147483647),我门可以使用int.MaxValue 和 int.MinValue来分别获取到int的最大值和最小值。

    取值范围.png
      当我们在最大值的情况下+1,灰枣偶成int类型数据溢出,则值会变成最小值,此时,输出的结果并不是我们需要的。我们需要通过手动的开启溢出检查功能来捕捉异常。
      开启溢出检查为checked关键字 , 而unchecked正好相反

    举个栗子

    设置开启溢出检查
    我们在在Visual Studio中是允许设置项目属性来启用或者禁止溢出检查的。解决方案资源管理器—>右击选择属性—>在属性对话框中勾线生成—>单击右下角的高级按钮—>在高级生成设置对话框中勾选检查运算上溢/下溢选项

    在手动启用checked的情况下:
    此时checked关键字就打开运算溢出检查

    using System;
    
    namespace Test
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    int a = int.MaxValue;//将a的值赋值
                    checked
                    {
                        a++;//a的值加1
                        Console.WriteLine("程序不会执行这句语句");
                    }
                }
                catch (OverflowException)//捕获
                {
                    Console.WriteLine("a溢出了");
                    
                }
                Console.WriteLine("结束");
            }
        }
    }
    
    

    输出结果

    溢出异常捕获

    在关闭checked的情况下:
    此时使用了unchecked就会强制不检查溢出的代码块

    using System;
    
    namespace Test
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    int a = int.MaxValue;//将a的值赋值
                    unchecked   //将关键字改为unchecked
                    {
                        a++;//a的值加1
                        Console.WriteLine("程序不会执行这句语句");
                    }
                }
                catch (OverflowException)//捕获
                {
                    Console.WriteLine("a溢出了");
                    
                }
                Console.WriteLine("结束");
            }
        }
    }
    

    运行结果

    关闭checked运行结果

    相关文章

      网友评论

          本文标题:C# 溢出检测checked 与 unchecked

          本文链接:https://www.haomeiwen.com/subject/psuetctx.html