C#基础之checked与 unchecked的使用

时间:2024-02-01 09:47:42

C#基础之checked与 unchecked的使用

以上都是C#中的两个关键字的使用、据官网给出的相关介绍是:C# 语句既可以在已检查的上下文中执行,也可以在未检查的上下文中执行。

已检查的上下文中,算法溢出引发异常。 在未选中的上下文中忽略算术溢出并将结果截断,方法是:丢弃任何不适应目标类型的高序位。

  • checked 指定已检查的上下文。

  • unchecked 指定未检查的上下文。

1、checked

checked 关键字用于对整型类型算术运算和转换显式启用溢出检查。默认情况下,如果表达式仅包含常量值,且产生的值在目标类型范围之外,则会导致编译器错误。 如果表达式包含一个或多个非常量值,则编译器不检测溢出。 在下面的示例中,计算赋给 i2 的表达式不会导致编译器错误。int类型最大值为:2147483647

1 {
2     int ten = 10;
3     int i2 = 2147483647 + ten;
4     Console.WriteLine(i2);
5 }

控制台输出:

   默认情况下,在运行时也不检查这些非常量表达式是否溢出,这些表达式不引发溢出异常。 上面的示例显示 -2,147,483,639 作为两个正整数之和。

以上表达式包含一个或多个非常量值,则编译器不检测溢出、如果表达式仅包含常量值,且产生的值在目标类型范围之外,则会导致编译器错误?答案是会的

1  {
2      //如果表达式仅包含常量值
3      int i2 = 2147483647 + 10;
4      Console.WriteLine(i2);
5  }

 以上结果直接编译不通过。原因是由于编辑器默认情况下启用checked模式、并且仅包含常量值、不包括变量情况下、编辑器会自动帮我们判断、

那么对于第一种情况包含变量时、我们需要使用checked关键字判断是否运算溢出?代码如下

 1 checked
 2 {
 3     int ten = 10;
 4     try
 5     {
 6         int i3 = 2147483647 + ten;
 7     }
 8     catch(Exception ex)
 9     {
10         Console.WriteLine(ex.Message);
11     }
12  
13 }

控制台输出:

 以上就是checked关键字使用、启用是否溢出检查、那想要取消溢出检查呢?使用unchecked可以避开检查

2、unchecked

unchecked 关键字用于取消整型类型的算术运算和转换的溢出检查。

1  unchecked
2  {
3      int i2 = 2147483647 + 10;
4      Console.WriteLine(i2);
5  }

控制台输出:

  如果删除 unchecked 环境,会发生编译错误。 由于表达式的所有项都是常量,因此可在编译时检测到溢出。以上就是checked与uncheck的相关使用