gpt4 book ai didi

C#修改IEnumerable之谜,修改我的IEnumerable是什么?

转载 作者:太空狗 更新时间:2023-10-29 23:17:13 26 4
gpt4 key购买 nike

我编写了一个扩展方法来将项添加到 (EF) EntityCollection。我收到一个有趣的错误,说我的 IEnumerable(“items”)集合在 foreach 中的第一个循环之后已被修改。当我将 items 转换为 items.ToList() 时(如下面的代码),它工作正常。

我完全理解执行 ToList() 会生成项目的副本,然后 foreach 将对其进行操作。

我不明白的是,当我对它执行 foreach 时,是什么在修改 IEnumerable。

更新:不知何故,items 变量似乎与 collections 变量相同?

更新二:我觉得collection和entity可能会受到EF的entity tracking的影响,但是我还是没明白为什么

用法:

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);
}

最佳答案

collection.Remove(collection.First(c => c.ID == item.ID)); 

您正在迭代的集合中删除。

关于C#修改IEnumerable之谜,修改我的IEnumerable是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8789660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com