C # Модификация IEnumerable mystery, что меняет мой IEnumerable?

Я написал метод расширения для добавления элементов в (EF) EntityCollection. Я получил интересную ошибку, говоря, что моя коллекция IEnumerable ("items") была изменена после первого цикла в foreach. Когда я превращаю элементы в items.ToList () (как в приведенном ниже коде), он работает нормально.

Я полностью понимаю, что выполнение ToList () создаст копию элементов, с которыми затем будет работать foreach.

Я НЕ понимаю, что меняет IEnumerable, когда я выполняю над ним foreach.

Обновление: почему-то кажется, что переменная items совпадает с переменной коллекций?

Обновление 2: Я думаю, что отслеживание сущностей EF может повлиять на коллекцию и сущность, но я все еще не понимаю, почему

​​Использование:

ssp.ServiceAreas.ReplaceCollection (model.ServiceAreas);

Вот мой метод расширения:

    public static void AddOrUpdate<TEntity>(this EntityCollection<TEntity> collection, IEnumerable<TEntity> items)
        where TEntity : EntityObject, IProjectIdentity<int>, new()
    {
        foreach (var item in items.ToList())
            collection.AddOrUpdate(item);
    }

    public static void AddOrUpdate<TEntity>(this EntityCollection<TEntity> collection, TEntity item)
        where TEntity : EntityObject, IProjectIdentity<int>, new()
    {
        if (item.ID > 0 && collection.Any(c => c.ID == item.ID))
            collection.Remove(collection.First(c => c.ID == item.ID));
        // For now, the Remove NEVER gets hit

        collection.Add(item);
    }
5
задан sebastiaan 9 January 2012 в 17:01
поделиться