C#基础之checked与 unchecked的使用
以上都是C#中的两个关键字的使用、据官网给出的相关介绍是:C# 语句既可以在已检查的上下文中执行,也可以在未检查的上下文中执行。
在已检查的上下文中,算法溢出引发异常。 在未选中的上下文中忽略算术溢出并将结果截断,方法是:丢弃任何不适应目标类型的高序位。
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的相关使用