我有以下内容:
foreach (var depthCard in depthCards)
{
var card = InternalGetCard(db, depthCard.CardId);
var set = InternalGetSet(db, (int)card.ParentSetId);
var depthArray = InternalGetDepthArrayForCard(db, set.SetId);
foreach (var cardToUpdate in set.Cards)
{
// do stuff
SaveChanges(db);
depthCards.Remove(depthCardToUpdate); // since I already took care of it here, remove from depthCards
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为我正在循环中修改集合.我的问题是......是否有某种类型的集合允许这种类型的访问?
我不想ToList()的depthCards,因为我已经有他们,我想修改该列表作为我迭代.可能吗?
Ósc*_*pez 23
这是可能的,诀窍是向后迭代:
for (int i = depthCards.Count - 1; i >= 0; i--) {
if (depthCards[i] == something) { // condition to remove element, if applicable
depthCards.RemoveAt(i);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用for-loop 向后迭代
for (int i = depthCards.Count - 1; i >= 0; i--)
{
depthCards.RemoveAt(i);
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用List.ForEach允许在迭代时修改列表:
depthCardToUpdate.ForEach(dc => depthCardToUpdate.Remove(dc));
Run Code Online (Sandbox Code Playgroud)
或者如果您只想删除条件中的项目,请使用List.RemoveAll:
depthCardToUpdate.RemoveAll(dc => conditionHere);
Run Code Online (Sandbox Code Playgroud)