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

C#のIndexOutOfRangeException例外とは?発生原因とコード例を解説

IndexOutOfRangeExceptionは、配列のインデックスが有効な範囲(境界)の外側を参照したときに発生する例外です。C#では、配列のインデックスは0から始まり、「要素数 - 1」までが有効な範囲となります。この範囲を超えてアクセスしようとすると、実行時にこの例外がスローされます。

発生するケースの例

まず、要素数5のint型配列を宣言し、各要素に値を代入してみましょう。

int[] arr = new int[5];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;

この配列の有効なインデックスは「0」から「4」までです。しかし、次のように範囲外のインデックス「5」に値を代入しようとするとどうなるでしょうか。

arr[5] = 60;

上記のコードは、配列の6番目の要素にアクセスしようとしています。配列のサイズは5で宣言されているため、インデックス5は存在せず、ここでIndexOutOfRangeExceptionが発生します。

サンプルコード

実際に例外が発生する完全なコード例を見てみましょう。

using System;
using System.IO;
using System.Collections.Generic;
namespace Demo {
    class Program {
        static void Main(string[] args) {
            int[] arr = new int[5];
            arr[0] = 10;
            arr[1] = 20;
            arr[2] = 30;
            arr[3] = 40;
            arr[4] = 50;
            arr[5] = 60; // ここでエラーが発生する
        }
    }
}

実行結果

上記のプログラムを実行すると、次のようなエラーが出力されます。

Unhandled Exception:
System.IndexOutOfRangeException: Index was outside the bounds of the array.

このメッセージは「インデックスが配列の境界外でした」という意味で、範囲外のインデックスにアクセスしたことを示しています。

例外を防ぐためのポイント

この例外を回避するには、以下の点に注意しましょう。

  • 配列の長さはLengthプロパティで確認し、ループ処理では「i < arr.Length」のように条件を指定する。
  • 配列の最後の要素にアクセスする場合は、インデックスが「arr.Length - 1」以下であることを確認する。
  • ユーザー入力など外部からの値をインデックスとして使う場合は、必ず範囲チェックを行うか、try-catchブロックで例外を適切に処理する。
  1. C#の多次元配列とは?2次元配列の宣言方法と使い方を実例付きで解説

    C#では、多次元配列を扱うことができます。int型の2次元配列は、次のように宣言します。int[] a;多次元配列の中で最もシンプルな形式が2次元配列です。2次元配列とは、1次元配列を要素として持つ配列、すなわち「配列の配列」のような構造をイメージすると分かりやすいでしょう。例えば、次の図は3行4列の2次元配列を表しています。多次元配列の使用例ここからは、実際にC#で多次元配列を操作するサンプルコードを見ていきましょう。以下の例では、5行2列の2次元配列を宣言・初期化し、入れ子になったforループですべての要素を出力します。using System; namespace ArrayApplic

  2. Rubyで学ぶ選択ソート:仕組みの解説から実装まで徹底ガイド

    ※本記事は、Rubyでさまざまなソートアルゴリズムを学ぶシリーズの第2回です。第1回ではバブルソートを取り上げました。 この記事では、Rubyを使った選択ソート(Selection Sort)アルゴリズムの実装方法を順を追って解説します。選択ソートは「インプレース(in-place)型」の比較ソートアルゴリズムの一つで、ソート済みの要素が元のデータと同じ記憶領域をそのまま使用するのが特徴です。 はじめにお伝えしておきたいのですが、選択ソートはデータセットが小さい場合(10〜20要素程度)を除き、実務で使われることはほとんどありません。とはいえ、三輪車の乗り方を覚えてから自転車に挑むよう