処理をイメージしづらいので、バグを引き起こしやすくなるため、
『ループ処理の中でループ条件の要素数は変えてはダメ』
以下のプログラムを元に、どういう処理の流れとなるか見ていきます。
List<String> items = new List<string>();
items.Add("1.りんご");
items.Add("2.ぶどう");
items.Add("3.りんご");
foreach (string item in items)
{
if (item.Contains("ぶどう"))
{
items.Remove(item);
}
}
まず、foreach直前でリストの中身は↓のようになってます
第1ループ目:要素の1番目「1.りんご」を取り出して、ぶどうか判定し、そうではないので何もせず次へ
第2ループ目:要素の2番目「2.ぶどう」を取り出して、ぶどうが含まれるので、要素を削除。次へ
第3ループ目:要素の3番目...要素が存在しないので例外発生
という感じで、直感的に期待した処理をしてくれません。
この場合は、例えば下記のように、削除ではなく、
別の入れ物に残すものを入れるというやり方で、
ループ条件の要素数を変更しない実装が可能です。
List<String> items = new List<string>();
items.Add("1.りんご");
items.Add("2.ぶどう");
items.Add("3.りんご");
List<String> tmpList = new List<string>();
foreach (string item in items)
{
if (item.Contains("ぶどう") == false)
{
tmpList.Add(item);
}
}
items = tmpList;
foreach (string item in items)
{
Console.WriteLine(item);
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。