C# checked與unchecked用法

來源:互聯網
上載者:User
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 */}

以上就是C# checked與unchecked用法的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.