C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のOverflowException(オーバーフロー例外)とは?発生原因と対処法を解説

OverflowExceptionは、パラメータとして渡された値が整数型の範囲を超えている場合にスローされる例外です。C#では、int型(Int32)が表現できる範囲は -2,147,483,648 ~ 2,147,483,647 であり、この範囲外の値を扱おうとするとOverflowExceptionが発生します。

OverflowExceptionが発生する例

典型的なケースとして、int.Parse()メソッドに整数型の範囲を超える文字列を渡した場合が挙げられます。

以下のコードでは、int型で表現できない大きな数値を文字列としてint.Parse()に渡しているため、プログラムの実行時にOverflowExceptionがスローされます。

サンプルコード

using System;
class Demo {
    static void Main() {
        string str = "757657657657657";
        int res = int.Parse(str);
    }
}

実行結果(エラー出力)

上記のプログラムをコンパイルして実行すると、Int32(int型)の範囲を超える値を渡したため、次のようなエラーがスローされます。

Unhandled Exception:
System.OverflowException: Value was either too large or too small for an Int32.

OverflowExceptionへの対処法

この例外を回避するには、主に以下の2つの方法があります。

1. try-catchブロックで例外を捕捉する

using System;
class Demo {
    static void Main() {
        string str = "757657657657657";
        try {
            int res = int.Parse(str);
            Console.WriteLine(res);
        } catch (OverflowException) {
            Console.WriteLine("int型の範囲を超えています。");
        }
    }
}

2. int.TryParse()メソッドを使用する

int.TryParse()を使うと、変換が成功したかどうかをbool値で確認でき、例外がスローされません。範囲外の値や不正な形式の文字列に対しても安全に処理できます。

using System;
class Demo {
    static void Main() {
        string str = "757657657657657";
        if (int.TryParse(str, out int res)) {
            Console.WriteLine("変換成功: " + res);
        } else {
            Console.WriteLine("int型に変換できません。");
        }
    }
}

また、より大きな数値を扱いたい場合は、long型(Int64)やBigInteger構造体の使用も検討しましょう。これにより、int型では表現できない大きな値でも正しく処理できます。

  1. HTMLのvalue属性とは?使い方とサンプルコードをわかりやすく解説

    HTMLのvalue属性は、HTMLドキュメント内で要素の初期値(デフォルト値)を定義するための属性です。この属性は、button、input、meter、li、option、progress、paramといったHTML要素に対して使用できます。value属性はフォームやUIコンポーネントにおいて重要な役割を果たします。例えば、input要素では入力欄にあらかじめ表示されるテキストを指定でき、meter要素やprogress要素では現在の進捗状況を数値で表現できます。構文value属性の基本的な構文は以下のとおりです。<tagname value="text">

  2. C#の値型と参照型の違いをわかりやすく解説

    C#の変数は、大きく「値型(Value Type)」と「参照型(Reference Type)」の2種類に分類されます。この違いを正しく理解することは、メモリ管理やパフォーマンスの最適化において非常に重要です。それぞれの特徴を見ていきましょう。 値型(Value Type)とは 値型の変数には、データそのものが直接代入されます。すべての値型は System.ValueType クラスから派生しており、変数を宣言すると、システムはその値を格納するためのメモリを自動的に割り当てます。 値型の変数はスタック領域に格納されるという点が大きな特徴です。スタックはアクセスが高速なため、値型は効率的に動作し