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ブロックで例外を適切に処理する。
-
C#の多次元配列とは?2次元配列の宣言方法と使い方を実例付きで解説
C#では、多次元配列を扱うことができます。int型の2次元配列は、次のように宣言します。int[] a;多次元配列の中で最もシンプルな形式が2次元配列です。2次元配列とは、1次元配列を要素として持つ配列、すなわち「配列の配列」のような構造をイメージすると分かりやすいでしょう。例えば、次の図は3行4列の2次元配列を表しています。多次元配列の使用例ここからは、実際にC#で多次元配列を操作するサンプルコードを見ていきましょう。以下の例では、5行2列の2次元配列を宣言・初期化し、入れ子になったforループですべての要素を出力します。using System; namespace ArrayApplic
-
Rubyで学ぶ選択ソート:仕組みの解説から実装まで徹底ガイド
※本記事は、Rubyでさまざまなソートアルゴリズムを学ぶシリーズの第2回です。第1回ではバブルソートを取り上げました。 この記事では、Rubyを使った選択ソート(Selection Sort)アルゴリズムの実装方法を順を追って解説します。選択ソートは「インプレース(in-place)型」の比較ソートアルゴリズムの一つで、ソート済みの要素が元のデータと同じ記憶領域をそのまま使用するのが特徴です。 はじめにお伝えしておきたいのですが、選択ソートはデータセットが小さい場合(10〜20要素程度)を除き、実務で使われることはほとんどありません。とはいえ、三輪車の乗り方を覚えてから自転車に挑むよう