C# checked与unchecked用法

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

// 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);



// 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);}

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

posted @ 2011-11-07 13:23  黎明露珠  阅读(8365)  评论(0编辑  收藏  举报