• 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
    */
    }




  • 相关阅读:
    JsBridge踩坑之WebViewJavascriptBridge is undefined,找不到Bridge对象
    Android踩坑之couldn't find "libClingSDK.so"
    GDM, KDM, LightDM, SDDM的区别和安装配置
    安装完ubuntu需要做得事
    apt vs snap
    在shell下执行命令的方法
    Vimmer一套全语言支持的完美Vim配置——附Monaco字体
    Ubuntu gnome安装Monaco字体,FontForge module is probably not installed
    Ubuntu全方位美化,定制教程
    stm32--FatFs调试过程(SPIFlash)
  • 原文地址:https://www.cnblogs.com/limingluzhu/p/2239130.html
Copyright © 2020-2023  润新知