【C#】インデックスが配列の境界外です。の解決方法【System.IndexOutOfRangeException:】

C#,エラー/例外

C#で発生するエラー(例外)
System.IndexOutOfRangeException:'インデックスが配列の境界外です。’


今回は上記のエラーが発生したときの解決方法をご紹介します。

目次

・エラーの原因
・解決方法
・より良いコードを書くために

System.IndexOutOfRangeException:エラーの原因

この「インデックスが配列の境界外です」の原因は
宣言した配列の個数より多く、要素を呼び出しているから
です
イメージは下記の通りです。

int[] numbers = new int[3] { 4, 5, 6 };

for (int i = 0;i < 4;i++)
{
   numbers[i] = i;
   Console.WriteLine(numbers[i]);
}

上記のプログラムのように、
・int[] numbers = new int[3] { 4, 5, 6 };
配列を3つ定義しています。
しかし
for (int i = 0;i < 4;i++)
{
numbers[i] = i;

配列を4つ呼び出してしまっています

存在しない配列の番号を指定しているためエラーが発生しています。
そのため「配列の境界外です」とエラーを出されてしまいます。

System.IndexOutOfRangeException:解決方法

int[] numbers = new int[3] { 4, 5, 6 };

で呼び出している配列を下記のように

int[] numbers = new int[4] { 4, 5, 6, 7 };

と要素数を増やす。

あるいは

for (int i = 0;i < 4;i++)

for分のカウント変数の範囲「i < 4」を

for (int i = 0;i < 3;i++)

と変更すればエラーは解消します。

配列の要素数以上を指定することが無ければ例外は発生しません。

より良いコードを書くために

int[] numbers = new int[3] { 4, 5, 6 };

for (int i = 0;i < 4;i++)
{
   numbers[i] = i;
   Console.WriteLine(numbers[i]);
}

上記のようなコードは「変更に弱いプログラム」と呼ばれています。
「変更に弱いプログラム」とは
仕様が変更された場合、
変更する箇所が多いコードのことです。
変更に強くするためには

「複数の具象が抽象で一括操作可能となっている」必要があります。

int[] numbers = new int[3] { 4, 5, 6 };

for (int i = 0;i < 4;i++)
{
   numbers[i] = i;
   Console.WriteLine(numbers[i]);
}
for (int i = 0;i < 4;i++)

上記のコードだと、「i < 4」の部分が具象となっているため変更に弱いです。
そのため上記のコードを

for (int i = 0;i < numbers.Length; i++)

numbers.Lengthは配列の長さを求めてくれる関数です。
と変更してください。
このように具体的な数字を使用せずに
関数を用いて抽象化すれば
変更に強いコードになります

皆さんもぜひ試してみてください。



エラーを解決できなくて途方に暮れている人へ。

■無料プログラミング講座を開設しています!
下記にVisual Studioを使ったC#プログラミング初心者向け完全ガイドを掲載しています。

このガイドを一通り勉強すれば、C#プログラミングの基礎が学べます。
是非チャレンジしてみてください!

C#初心者向けに始め方ガイドを作成しています。
筆者

プログラミング初心者の方はぜひチャレンジしてみてください!!

C#,エラー/例外error,Exception

Posted by 9noike