zoukankan      html  css  js  c++  java
  • C# checked与unchecked用法

    checked 关键字用于对整型算术运算和转换显式启用溢出检查。

    默认情况下,如果表达式仅包含常数值,且产生的值在目标类型范围之外,则它会导致编译器错误。 如果表达式包含一个或多个非常数值,则编译器不检测溢出。 在下面的示例中,计算赋给 i2 的表达式不会导致编译器错误。

    // The following example causes compiler error CS0220 because 2147483647
    // is the maximum value for integers. 
    //int i1 = 2147483647 + 10;
    
    // The following example, which includes variable ten, does not cause
    // a compiler error.
    int ten = 10;
    int i2 = 2147483647 + ten;
    
    // By default, the overflow in the previous statement also does
    // not cause a run-time exception. The following line displays 
    // -2,147,483,639 as the sum of 2,147,483,647 and 10.
    Console.WriteLine(i2);
    
    
    

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

    可以通过编译器选项、环境配置或使用 checked 关键字来启用溢出检查。 下面的示例演示如何使用 checked 表达式或 checked 块,在运行时检测由前面的求和计算导致的溢出。 两个示例都引发溢出异常。

    // If the previous sum is attempted in a checked environment, an 
    // OverflowException error is raised.

    // Checked expression.
    Console.WriteLine(checked(2147483647 + ten));

    // Checked block.
    checked
    {
    int i3 = 2147483647 + ten;
    Console.WriteLine(i3);
    }

    可以使用unchecked取消溢出检查

    此示例演示如何使用 checked 启用运行时溢出检查。

    class OverFlowTest
    {
    // Set maxIntValue to the maximum value for integers.
    static int maxIntValue = 2147483647;

    // Using a checked expression.
    static int CheckedMethod()
    {
    int z = 0;
    try
    {
    // The following line raises an exception because it is checked.
    z = checked(maxIntValue + 10);
    }
    catch (System.OverflowException e)
    {
    // The following line displays information about the error.
    Console.WriteLine("CHECKED and CAUGHT: " + e.ToString());
    }
    // The value of z is still 0.
    return z;
    }

    // Using an unchecked expression.
    static int UncheckedMethod()
    {
    int z = 0;
    try
    {
    // The following calculation is unchecked and will not
    // raise an exception.
    z = maxIntValue + 10;
    }
    catch (System.OverflowException e)
    {
    // The following line will not be executed.
    Console.WriteLine("UNCHECKED and CAUGHT: " + e.ToString());
    }
    // Because of the undetected overflow, the sum of 2147483647 + 10 is
    // returned as -2147483639.
    return z;
    }

    static void Main()
    {
    Console.WriteLine("\nCHECKED output value is: {0}",
    CheckedMethod());
    Console.WriteLine("UNCHECKED output value is: {0}",
    UncheckedMethod());
    }
    /*
    Output:
    CHECKED and CAUGHT: System.OverflowException: Arithmetic operation resulted
    in an overflow.
    at ConsoleApplication1.OverFlowTest.CheckedMethod()

    CHECKED output value is: 0
    UNCHECKED output value is: -2147483639
    */
    }




  • 相关阅读:
    取消a标签的页面跳转
    js 获取元素内部文本
    彻底取消Myeclipse对js文件的校验
    控制流程之if判断
    格式化的三种输出方式和基本运算符以及他们的优先级
    解压缩和python如何与用户交互
    数据类型基础和各种数据类型
    花式赋值和注释
    变量 及其命名和使用规范
    进入的python世界。了解执行python的交互方式和常用开发工具
  • 原文地址:https://www.cnblogs.com/limingluzhu/p/2239130.html
Copyright © 2011-2022 走看看