使用checked语句防止数据溢出的解决方法

 更新时间:2020年6月25日 11:41  点击:2191
在C#中有一个关键字checked,它用来判断当前上下文中的数值运算和数值转换是否会溢出。如是是常量溢出,那在编译时就能发现;如果是变量溢出,那在运行时会抛出OverflowException。
数值运算有:++   —   - (unary)   +   -   *   /

有了这个就不用担心数据溢出了。

checked
checked 有两种使用方法:
1.作为操作符来使用
复制代码 代码如下:

int a = int.MinValue;
int c = checked(a--);

执行的时候会抛出异常:

image

2.检查一大块代码:
这样子会对里面所有的代码都做检查
复制代码 代码如下:

checked
{
    int a = int.MinValue;
    int c = a--;
}

如下图:

image

unchecked
和checked对应,还有一个unchecked关键字,用来取消检查。
也是两种使用;
1.作为运算符:

复制代码 代码如下:

int a = int.MinValue;
int c = unchecked(a--);

这样子就不会抛异常了

image

2.检查一大块代码

复制代码 代码如下:

unchecked
{
    int a = int.MinValue;
    int c = a--;
}

也不抛异常:

image

/checked 和/checked-
如果代码里总是要写这么多checked语句是不是很烦?如果能有一个编译参数就好,只有设置了就都会检查。微软也想到了这个,它提供了一个/checked 参数来做,也提供了一个/checked-来取消。
•溢出检查 /checked,也可以是/checked+
•溢出不检查 /checked-
当然,你想取消所有的检查也是可以的,命令行参数是/checked-
复制代码 代码如下:

csc t2.cs /checked

其中csc是编译器csc.exe , t2.cs 是被编译的代码文件。
我想很多人是用Visual Studio吧。VS里也是可以设置的。
步骤如下,我以VS2010为例,(VS2005,2008差不多)
1。在工程上点右键,选择菜单Properties

image

2。点击“Build”,再点击“Advanced”

image

3。在打开的对话框中,把“Check for arithmetic overflow/underflow”打上勾

image

几个注意
1.checked语句只对当前上下文中的代码有效,即不对调用的函数内部做检查。

复制代码 代码如下:

static void Main(string[] args)
{
    checked
    {
        TestFun();
    }
}
static void TestFun()
{
    int a = int.MinValue;
    int c = a--;
}

这段代码中。不会跑异常,因为checked关键字没有影响到TestFun内部。如果需要这么做的话,要么在TestFun内部加checked关键字,要么打开全局开关(加编译参数/checked或者VS中设置)。
2.checked,unchecked关键字不检查左移和右移是否溢出。
复制代码 代码如下:

static void Main(string[] args)
{
    checked
    {
        int a = int.MinValue;
        int c = a>>1;
    }
}

执行不会抛异常:

image

3.为了性能考虑,建议Debug时做检查,Release时不做检查。

[!--infotagslink--]

相关文章

  • 原生js操作checkbox用document.getElementById实现

    1、页面加载成功后,点击选中或取消选中该checkbox,checkbox属性里的checked属性不会根据该checkbox是否选中而变化...2013-10-13
  • Jquery attr("checked") 返回checked或undefined 获取选中失效

    假设我们现在需要这样的场景:页面上有一个checkbox,我们期望通过Jquery来获得它是否选中,或者通过Jquery来让它被选中。 在JQ1.6之前的版本,我们会这样写我们的代码: 复制代码 代码如下: <input type='checkbox' id='cb'/>...2013-10-13
  • PHP中如何防止外部恶意提交调用ajax接口

    本文简单介绍如何防止外部恶意调用ajax接口,以达到节省流量,减轻服务器压力的目的。...2016-04-15
  • php中防止post提交重复数据

    重复提交数据我们在应用中经常会碰到了,今天我给各位介绍利用session来防止用户不小心重复提交数据的一个例子 原理非常的简单:就是用session在表单页面记录下,...2016-11-25
  • 深入理解c# checked unchecked 关键字

    本篇文章是对c#中的checked unchecked 关键字进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • php文件锁类防止并发的例子

    文件锁可以防止文件读写时多人访问时出现共享问题或数据不准确的问题,下面我们来看一篇关于php文件锁类防止并发的例子,具体如下. 工作间隙写了个文件锁的类,用于...2016-11-25
  • 如何防止入侵:My SQL各种攻击方法大全

    MYSQL用户ROOT密码为空时是一个很大的漏洞,在网上也有许多一些利用此漏洞的方法,一般就是写一个ASP或PHP的后门,不仅很麻烦,而且还要猜解网站的目录,如果对方没有开IIS,那我...2016-11-25
  • 使用checked语句防止数据溢出的解决方法

    本篇文章是对用checked语句防止数据溢出的解决方法进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • php防止sql注入的方法详解

    小编给大家推荐的这篇文章介绍了php防止sql注入的方法,非常实用,有兴趣的同学快来看看吧。 一、什么是SQL注入式攻击? 所谓SQL注入式攻击,就是攻击者把SQL命令插入...2017-07-06
  • .Net程序防止被注入代码(整站通用)分享

    防止sql注入,通常一个一个文件修改不仅麻烦而且还有漏掉的危险,下面我说一上如何从整个系统防止注入...2021-09-22
  • 如何防止网站被搜索引擎认定为SPAM

    (1)域名、IP地址的链接数量   这种方式一般是查询网站是否专门提供链接服务的页面。如果这个页面导出链接数量太多时,那么搜索引擎可能会认定网站是SPAM。当然,导航网...2016-10-10
  • php利用cookie防止重复提交解决办法

    本文章介绍了关于如何利用cookie来防止用户重复提交相同的数据的解决办法, 原理是 如果数据通过了上边的两次验证,说明数据是合法有效的数据。这时候我们把提交的...2016-11-25
  • C#入门之checked和unchecked的区别实例解析

    这篇文章主要介绍了C#中checked和unchecked的区别,是学习C#必须要牢固掌握的,需要的朋友可以参考下...2020-06-25
  • 深入分析php表单加入Token防止重复提交的例子

    下面我们来看一篇关于深入分析php表单加入Token防止重复提交的例子,希望这篇文章能够帮助到各位朋友,具体的步骤细节如下. Token浅谈 Token,就是令牌,最大的特点...2016-11-25
  • vue 防止多次点击的实践

    本文主要介绍了vue 防止多次点击,可以有效防止恶意点击,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-09
  • C#难点逐个击破(7):checked与unchecked

    checked 关键字用于对整型算术运算和转换显式启用溢出检查。...2020-06-25
  • css防止表格被内容撑破的方法

    默认情况下,设定了表格大小,看起来没什么问题,但当表格里装了很多比表格宽度要宽的内容时就会发现表格自然的被撑大了。 第一种情况是表格被英文单词撑破了。 解决办...2017-01-22
  • 防止在服务器处理完成之前用户多次点击提交按钮处理代码

    在提交表单时,如果网页速度过慢或者其他原因,用户多次提交能导致数据的修改,怎么解决这个问题呢,接下来将为您解决这个问题,需要的朋友可以了解下...2021-09-22
  • 有效防止sql注入的方法演示

    这篇文章主要给大家介绍了关于有效防止sql注入的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用sql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-08-16
  • php防止网站被f5刷新的例子

    最近比较晕了,博客经常给朋友f5不停的刷新了,这个让一个空间根据搞不定呀,后来网上整理了一些防止刷新的代码才得己解决,下面来看到整理的代码吧,希望这些例子对你有帮助。...2016-11-25