我有这些嵌套的Foreach:
foreach (var item1 in ocChoicesinItem)
{
foreach (var item2 in temp.ItemsInInvoiceChoices)
{
if (item1.ChoicesId == item2.ChoicesId)
ocChoicesinItem.Remove(item1);
}
}
从ocChoicesinItem中删除项目时出现问题,给我这个错误:
有没有办法实现这个目标?
提前致谢。
答案 0 :(得分:5)
您需要添加' ToList'如果要删除集合中的项目,请使用语句:
foreach (var item1 in ocChoicesinItem.ToList())
{
foreach (var item2 in temp.ItemsInInvoiceChoices)
{
if (item1.ChoicesId == item2.ChoicesId)
ocChoicesinItem.Remove(item1);
}
}
答案 1 :(得分:1)
您在迭代该集合时无法修改集合,因为您在调用Enumerator
MoveNext
无效
尝试:
public static class ExtensionMethods
{
public static int RemoveAll<T>(
this ObservableCollection<T> coll, Func<T, bool> condition)
{
var itemsToRemove = coll.Where(condition).ToList();
foreach (var itemToRemove in itemsToRemove)
{
coll.Remove(itemToRemove);
}
return itemsToRemove.Count;
}
}
ocChoicesinItem.RemoveAll(x => temp.ItemsInInvoiceChoices.Any(y => y.ChoicesId == x.ChoicesId);
答案 2 :(得分:0)
尝试类似
的内容List<string> ocChoicesinItem = new List<string>{"One", "Two", "Three"};
List<string> ItemsInInvoiceChoices = new List<string> { "Three" };
ocChoicesinItem.RemoveAll(x => ItemsInInvoiceChoices.Contains(x));
显然我正在使用字符串,因为我不知道你的收藏品包含哪种类型;您可能需要比较谓词中的ID。