如果集合的 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/