asp.net中的check与uncheck关键字用法解析

 更新时间:2021年9月22日 10:11  点击:1696

本文实例讲述了asp.net中的check与uncheck关键字用法。分享给大家供大家参考。具体分析如下:

checked和unchecked是两个不常用的关键字,但是确是非常有用的关键字,对此,建议测试时开启全局checked编译器选项。

1. 一段编译没经由过程的代码

复制代码 代码如下:
int a = int.MaxValue * 2;

以上代码段编译没有经由过程,在VS2010中会有一条红色的波浪线指出这段代码有题目:”The operation overflows at compile time in checked mode”。这说了然编译器会在编译时搜检数学运算是否溢出。然则编译时能搜检出溢出的景象仅限于应用常量的运算。2中的代码编译器就不报不失足误来了。

2. 一段编译经由过程然则不克不及获得正确成果的代码

复制代码 代码如下:
int temp = int.MaxValue;
int a = temp * 2;
Console.Write(a);

我先把常量int.MaxValue的值给了姑且变量temp,然后应用姑且变量乘以2策画成果赋值给a;这段代码是可以正常履行的,履行成果将输出 -2。
这申明在运行时默认景象法度是不会搜检算术运算是否溢出的,cpu尽管算,对于它来讲按规矩算就是了,成果对不合错误不是他的错。
正常履行了,而成果是错误的,这是很是危险的景象,该如何避免这种危险呢?请看3

3. 应用checked关键字,溢出时报警

复制代码 代码如下:
int temp = int.MaxValue;
try
{
    int a = checked(temp * 2);
     Console.WriteLine(a);
}
catch (OverflowException)
{
Console.WriteLine("溢出了,要处理惩罚哟");
}

应用checked关键字润饰temp*2的策画成果,并应用try catch在产生溢出时做处理惩罚。以上代码将输出:“溢出了,要处理惩罚哟”
题目是若是一段代码中有很多算术运算都须要做溢出搜检,那会有很多checked润饰的表达式,怎么办呢?请看4

4. checked关键字可以润饰一个语句块,请看下面代码

复制代码 代码如下:
int temp = int.MaxValue;
try
{
    checked
    {
        int num = temp / 20;
        int a = temp * 2;
        int c = temp * 1000;
    }
}
catch (OverflowException)
{
    Console.WriteLine("溢出了,要处理惩罚哟");
}

 
以上法度输出成果和3一样

5. checked在避免算术溢出方面很有效,那么unchecked呢,它有效吗?答案是必然的,有时辰我们不须要正确的策画成果,我们只是须要那么一个数罢了,至于溢出不溢出的关系不大,比如说生成一个对象的HashCode,比如说按照一个算法策画出一个相对随机数,这都是不须要正确成果的。如下代码片段

复制代码 代码如下:
class Person
{
   public string Name { get; set; }
 
    public string Title { get; set; }
 
    public override int GetHashCode()
    {
        return unchecked(Name.GetHashCode() + Title.GetHashCode());
    }
}

unchecked也可以润饰语句块,其用法和checked完全一样。

6. checked和unchecked是可以嵌套应用的,固然没啥意义。语句是否是checked以比来嵌套的checked或者unchecked决意

7. 从IL中看checked关键字
C#代码:

复制代码 代码如下:
static void Main(string[] args)
{
    int a = int.MaxValue;
    int b = a * 2;
    int c = checked(a * 2);
    int d = unchecked(a + 3);
 
    Console.Read();
}

对应IL
复制代码 代码如下:
.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       26 (0 x1a)
  .maxstack  2
  .locals init ([0] int32 a,
           [1] int32 b,
           [2] int32 c,
           [3] int32 d)
  IL_0000:  nop
  IL_0001:  ldc.i4     0 x7fffffff
  IL_0006:  stloc.0
  IL_0007:  ldloc.0
  IL_0008:  ldc.i4.2
  IL_0009:  mul
  IL_000a:  stloc.1
  IL_000b:  ldloc.0
  IL_000c:  ldc.i4.2
  IL_000d:  mul.ovf
  IL_000e:  stloc.2
  IL_000f:  ldloc.0
  IL_0010:  ldc.i4.3
  IL_0011:  add
  IL_0012:  stloc.3
  IL_0013:  call       int32 [mscorlib]System.Console::Read()
  IL_0018:  pop
  IL_0019:  ret
} // end of method Program::Main

请看IL中的红色和绿色加重显示代码,可以看出应用checked时,IL的运算是mul.ovf不应用checked或者应用unchecked时的IL运算函数是mul或者add,不带.ovf。

8. checked或者unchecked只影响其包抄的语句,不会影响到包抄的语句内调用函数的代码块,如下示例:

复制代码 代码如下:
static void Main(string[] args)
{
    int a = int.MaxValue;
    int b = 20;
    checked
    {
        int c = TestMethod(a, b);
        Console.WriteLine(c);
    }
}
static int TestMethod(int a, int b)
{
    return a * b;
}

上方代码将会正常履行,checked语句块并未起到应有的感化。

9. 全局开启或者封闭checked编译选项
在项目属性页上选择“生成”选项卡,然后点击“高等”按钮,选中“搜检数学运算溢出”选项,如下示意图

希望本文所述对大家的asp.net程序设计有所帮助。

[!--infotagslink--]

相关文章

  • ASP.NET购物车实现过程详解

    这篇文章主要为大家详细介绍了ASP.NET购物车的实现过程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
  • 在ASP.NET 2.0中操作数据之七十二:调试存储过程

    在开发过程中,使用Visual Studio的断点调试功能可以很方便帮我们调试发现程序存在的错误,同样Visual Studio也支持对SQL Server里面的存储过程进行调试,下面就让我们看看具体的调试方法。...2021-09-22
  • C# 中的var关键字详细介绍

    这篇文章主要介绍了C# 中的var关键字详细介绍的相关资料,需要的朋友可以参考下...2020-06-25
  • ASP.NET Core根据环境变量支持多个 appsettings.json配置文件

    这篇文章主要介绍了ASP.NET Core根据环境变量支持多个 appsettings.json配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
  • 记一次EFCore类型转换错误及解决方案

    这篇文章主要介绍了记一次EFCore类型转换错误及解决方案,帮助大家更好的理解和学习使用asp.net core,感兴趣的朋友可以了解下...2021-09-22
  • C#中的yield关键字的使用方法介绍

    yield这个关键字是和迭代器挂钩的,而且是与return一起以yield return的形式合用的,用来返回迭代器中的条目。...2020-06-25
  • Spring Data JPA 关键字Exists的用法说明

    这篇文章主要介绍了Spring Data JPA 关键字Exists的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-10
  • php关键字仅替换一次的实现函数

    对于批量替换关键字的问题,仅替换而言没什么可说的,但这里需要的是每个关键字仅需要替换一次就可以了。查阅了php相关函数文档,发现php本身是没有函数实现这个功能的,所以不得不自己解决了。总结了几种可行方法,小记一下! (1...2015-10-30
  • c# volatile 关键字的拾遗补漏

    这篇文章主要介绍了c# volatile 关键字的相关资料,帮助大家更好的理解和学习c#的相关知识,感兴趣的朋友可以了解下...2020-12-08
  • 详解ASP.NET Core 中基于工厂的中间件激活的实现方法

    这篇文章主要介绍了ASP.NET Core 中基于工厂的中间件激活的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-22
  • 用python获取txt文件中关键字的数量

    这篇文章主要介绍了如何用python获取txt文件中关键字的数量,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下...2020-12-24
  • asp.net通过消息队列处理高并发请求(以抢小米手机为例)

    这篇文章主要介绍了asp.net通过消息队列处理高并发请求(以抢小米手机为例),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
  • ASP.NET 2.0中的数据操作:使用两个DropDownList过滤的主/从报表

    在前面的指南中我们研究了如何显示一个简单的主/从报表, 该报表使用DropDownList和GridView控件, DropDownList填充类别,GridView显示选定类别的产品. 这类报表用于显示具有...2016-05-19
  • ASP.NET单选按钮控件RadioButton常用属性和方法介绍

    RadioButton又称单选按钮,其在工具箱中的图标为 ,单选按钮通常成组出现,用于提供两个或多个互斥选项,即在一组单选钮中只能选择一个...2021-09-22
  • Delphi常用关键字用法详解

    这篇文章主要介绍了Delphi常用关键字用法,包括了各个常用的关键字及其详细用法,需要的朋友可以参考下...2020-06-30
  • Java类的访问权限关键字用法说明

    这篇文章主要介绍了Java类的访问权限关键字用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-29
  • 详解C语言中const关键字的用法

    这篇文章主要对C语言中const关键字的用法进行了详细的分析介绍,需要的朋友可以参考下...2020-04-25
  • ASP.NET中iframe框架点击左边页面链接 右边显示链接页面内容

    这篇文章主要介绍了ASP.NET中iframe框架点击左边页面链接,右边显示链接页面内容的实现代码,感兴趣的小伙伴们可以参考一下...2021-09-22
  • 创建一个完整的ASP.NET Web API项目

    ASP.NET Web API具有与ASP.NET MVC类似的编程方式,ASP.NET Web API不仅仅具有一个完全独立的消息处理管道,而且这个管道比为ASP.NET MVC设计的管道更为复杂,功能也更为强大。下面创建一个简单的Web API项目,需要的朋友可以参考下...2021-09-22
  • ASP.NET连接MySql数据库的2个方法及示例

    这篇文章主要介绍了ASP.NET连接MySql数据库的2个方法及示例,使用的是MySQL官方组件和ODBC.NET,需要的朋友可以参考下...2021-09-22