C# のチェックされた使用法とチェックされていない使用法

黄舟
リリース: 2016-12-28 10:47:53
オリジナル
1776 人が閲覧しました

checked キーワードは、整数の算術演算と変換のオーバーフロー チェックを明示的に有効にするために使用されます。

デフォルトでは、式に定数値のみが含まれている場合、結果の値がターゲット型の範囲外であるとコンパイラ エラーが発生します。式に 1 つ以上の非定数値が含まれている場合、コンパイラはオーバーフローを検出しません。次の例では、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 つの正の整数の合計として -2,147,483,639 が示されています。

オーバーフローチェックは、コンパイラオプション、環境設定、または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# の使用方法のチェック済みおよび未チェックの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) を参照してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート