次のいずれかのエラーが発生します。
- 「インデックスが範囲外でした。負ではなく、コレクションのサイズ未満でなければなりません」
- 「挿入インデックスが範囲外でした。負ではなく、サイズ以下である必要があります。」
- "インデックスが配列の範囲外だった。"
それはどういう意味ですか、どうすれば修正できますか?
次のいずれかのエラーが発生します。
それはどういう意味ですか、どうすれば修正できますか?
コレクションの境界を超える数値インデックスを使用して、コレクション内の要素にアクセスしようとしたためです。
通常、コレクションの最初の要素は index に配置されます0
。最後の要素は indexn-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]);
}
これは、ループが 0 から開始し、が より小さくない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.