gpt4 book ai didi

c# - 遍历 ICollection 并设置为 null

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:14 25 4
gpt4 key购买 nike

如果集合的 ID 在 ID 列表中,我需要从 ICollection 中删除数据。

我目前拥有的:

    foreach (var notSelectedToolId in notSelectedToolIds)
{
for (int i = 0; i < matchingHoleInfoVm.ToolHeader.Count; i++)
{
if (matchingHoleInfoVm.ToolHeader.ElementAt(i).ToolID == notSelectedToolId)
{
matchingHoleInfoVm.ToolHeader.ElementAt(i) = new ToolHeaderViewModel();
}
}
}

我得到的错误:“This expression cannot be used as an assignment target”

我怎样才能让它工作?

最佳答案

你不能,基本上 - 不是 just ICollection (甚至 ICollection<T> )。它们都不允许您用新元素替换现有元素。

IList<T> , 这很简单:

var list = matchingHoleInfoVm.ToolHeader;
for (int i = 0; i < list.Count; i++)
{
if (list[i].ToolID == notSelectedToolId)
{
list[i] = new ToolHeaderViewModel();
}
}

在大多数情况下,您已经获得了 ICollection<T> ,你会发现它已经实现了 IList<T> .如果不是,您需要仔细查看集合实际上是什么,并考虑“在同一索引处替换”是否有意义。 (例如,如果是 HashSet<,>,您可以只删除现有项目并添加新项目...)

编辑:如果你只需要删除项目,你可以只使用 Remove方法:

var itemsToRemove = collection.Where(c => c.ToolID == notSelectedToolId).ToList();
.ToList();
foreach (var item in itemsToRemove)
{
collection.Remove(item);
}

此外,您不需要嵌套循环 - 您可以使用类似的东西:

var itemsToRemove = collection.Where(c => notSelectedToolIds.Contains(c.ToolID))

一次性找到所有要删除的对象(然后如上所述删除它们)。

关于c# - 遍历 ICollection 并设置为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27133653/

25 4 0