【C#】インデックスが配列の境界外です。の解決方法【System.IndexOutOfRangeException:】
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#プログラミングの基礎が学べます。
是非チャレンジしてみてください!
プログラミング初心者の方はぜひチャレンジしてみてください!!