使用checked和unchecked来对整数溢出进行检测和忽略

Posted on 2018-11-25 12:45  iNeXTs  阅读(293)  评论(0编辑  收藏  举报

在C#中,整数int32的取值为-2147483648~2147473647(可以通过int.MaxValue和int.MinValue获得)当超出这个范围后,编译器不会进行检查,仍然会进行运算,但得到的结果是错误的。所以,有的时候使用checked进行整数溢出的检测。也可以通过unchecked进行,检测的忽略。 checked和unchecked有两种写法:

  1. 对单独的一个算术表达式进行检测:
int max = int.MaxValue;
int willThrow = checked(max++);
对于++,+=等算术运算符都是可用的,但需要一个变量来进行返回值的接收。
  1. 对一个语句块进行检测:
int max = int.MaxValue;
checked{
max++;
}
check和unchecked的一些特性:
1. 只能对整数进行操作,所以除了int和long之外的类型变量不可以使用
2. 当对语句块进行检测的时候,只有包含在语句块中的代码才会对其进行检测。语句块中调用的方法就不会被检测。
除了使用关键字进行整数溢出的检测,还可以开启系统内的编辑器选项来进行全局的检测设置:
  1. 选中项目,右键菜单中点击属性
  1. 选中页签Build,点击右下角Advanced
  1. 然后在弹出的面板中,勾选检测选项就可以实现全局的溢出检测了