美文网首页
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