/ /「範囲外のインデックス」例外とは何ですか?どのように修正できますか? [複製] - C#、.net、インデックスアウトの範囲外

「範囲外のインデックス」例外とは何ですか?どのように修正できますか? [複製] - C#、.net、インデックスアウトの範囲外

私は次のエラーのいずれかを受けています:

  • 「索引が範囲外です。負でなく、コレクションのサイズより小さくなければなりません」
  • msgstr "挿入インデックスが範囲外です。負でなく、サイズ以下でなければなりません。"
  • "インデックスが配列の範囲外だった。"

それはどういう意味ですか、どうすれば修正できますか?

関連項目
IndexOutOfRangeException
ArgumentOutOfRangeException

回答:

回答№1の33

このエラーはなぜ発生しますか?

コレクションの要素の境界を超える数値インデックスを使用して、コレクションの要素にアクセスしようとしたためです。

コレクション内の最初の要素は、一般にインデックスに配置されます 0。最後の要素はインデックスにあります n-1、どこで n それは Size コレクションの要素の数(含まれる要素の数)負の数をインデックスとして使用するか、 Size-1、あなたはエラーを起こすでしょう。

インデックス配列の仕組み

次のような配列を宣言すると、

var array = new int[6]

配列の最初と最後の要素は次のとおりです。

var firstElement = array[0];
var lastElement = array[5];

だからあなたが書くとき:

var element = array[5];

5番目の要素ではなく配列の6番目の要素を取得しています。

通常、次のように配列をループします。

for (int index = 0; index < array.Length; index++)
{
Console.WriteLine(array[index]);
}

これは、ループがゼロから始まり、 Length-1 なぜなら index もはや Length.

ただし、これにより例外がスローされます。

for (int index = 0; index <= array.Length; index++)
{
Console.WriteLine(array[index]);
}

注目に値する <= そこ? index 最後のループ反復では範囲外になります。なぜならループは Length 有効なインデックスですが、そうではありません。

他のコレクションの仕組み

リストは同じ方法で動作しますが、 Count の代わりに Length。彼らはまだゼロから始まり、 Count - 1.

for (int index = 0; i < list.Count; index++)
{
Console.WriteLine(list[index]);
}

ただし、次のコマンドを使用してリストを反復処理することもできます。 foreachインデックス全体の問題を完全に回避します。

foreach (var element in list)
{
Console.WriteLine(element.ToString());
}

まだコレクションに追加されていない要素は、索引付けできません。

var list = new List<string>();
list.Add("Zero");
list.Add("One");
list.Add("Two");
Console.WriteLine(list[3]);  // Throws exception.