Посты про List

List.ForEach в .NET 4.5



Продолжим обсуждать тему изменения коллекции внутри цикла foreach. Следующий код

var list = new List<int> { 1, 2 };
foreach (var i in list)
{
    if (i == 1)
        list.Add(3);
    Console.WriteLine(i);
}

выбросит InvalidOperationException. А как думаете, что случится при выполнении цикла через List<T>.ForEach?

var list = new List<int> { 1, 2 };
list.ForEach(i =>
{
    if (i == 1)
        list.Add(3);
    Console.WriteLine(i);
});

Правильный ответ: зависит.

Читать дальше    Комментарии


Сайд-эффект внутренней реализации List



Если вы делаете foreach по некоторому List-у, то менять итерируемый лист внутри цикла крайне не рекомендуется, ведь это верный способ получить InvalidOperationException. А теперь загадка: как думаете, что случится со следующим кодом:

var list = new List<int> { 0, 1, 2 };
foreach(var x in list)
{
  if (x == 0)
  {
    for (int i = int.MinValue; i < int.MaxValue; i++)
      list[0] = 0;
    list.Add(3);
  }
  Console.WriteLine(x);
}

Читать дальше    Комментарии