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

C#のIndexOutOfRangeExceptionとは?配列の範囲外エラーの原因と対処法

IndexOutOfRangeExceptionとは

Javaでは、配列の範囲外にアクセスした際に「ArrayIndexOutOfBoundsException」が発生します。C#においてこれに相当する例外がIndexOutOfRangeExceptionです。

この例外は、指定したインデックスが配列の有効な範囲(0 ~ 配列の長さ - 1)の外側にある場合にスローされます。C#の配列は0から始まるため、たとえば要素数3の配列で有効なインデックスは0、1、2のみです。

コード例

次のコードでは、要素数3の配列に対して存在しないインデックス「4」にアクセスしており、実行時に例外が発生します。

using System;
using System.IO;
using System.Collections.Generic;

namespace Demo {
    class Program {
        static void Main(string[] args) {
            int[] arr = new int[3];
            arr[0] = 5;
            arr[1] = 7;
            arr[2] = 8;
            arr[4] = 24; // ここでエラーが発生する
        }
    }
}

上記の例では、有効なインデックスは0~2までですが、インデックス4への代入を試みているため、プログラムは異常終了します。

実行結果

このプログラムを実行すると、次のようなエラーメッセージが表示されます。

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

例外を防ぐための対策

IndexOutOfRangeExceptionを回避するには、次のような方法が有効です。

  • 配列の長さを事前に確認する: アクセス前に arr.Length を使って、インデックスが有効範囲内であるかをチェックしましょう。
  • foreach文を活用する: すべての要素に順番にアクセスしたい場合は、foreachループを使えば範囲外アクセスを構造的に防げます。
  • List<T>などのコレクションを検討する: 要素数が動的に変わるデータを扱う場合は、List<T>の方が柔軟に管理できます。

配列操作を行う際は、常にインデックスの範囲を意識することで、このようなランタイムエラーを未然に防ぐことができます。

  1. Linuxの仮想ディレクトリ構造を徹底解説!「/」から「/var」まで各ディレクトリの役割

    Linuxを始めたばかりのユーザーは、学ぶべき情報の山に直面します。「ターミナルって何?」「ソフトウェアのアップデートはどうやって実行するの?」「どのディストリビューションを選べばいいの?」といった疑問はよくあるものです。しかし実は、経験を積んだLinuxユーザーでも悩まされがちな質問があります。それが「Linuxの仮想ディレクトリシステムにあるそれぞれのディレクトリには何が入っているのか?」というものです。本記事では、「/」から「/boot」まで、Linuxの仮想ディレクトリシステムについて詳しく解説します。 Linuxの仮想ディレクトリシステムとは? 仮想ディレクトリシステム(Vir

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

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