在foreach循环中抛出一个错误,该集合被修改。
考虑到在foreach循环中唯一发生的事情是一个方法,我在其中传递了一个字符串。我找不到一种方法可以在循环期间更改集合“卡片”,而不管方法内部发生了什么。
我想知道你们中是否有人对ExcludeCard方法有一个定义,该定义可能会更改卡的集合。
在其他人发表了很好的评论之后,我想补充一下,该方法是由另一个类调用的。 Lack方法无法重新引用调用它的类。
public void Lack(List<string> cards, int playerIndex)
{
foreach (string card in cards)
{
ExcludeCard(card, playerIndex);
}
}
答案 0 :(得分:1)
如果您的ExcludeCard
实现修改了传递给Lack
方法的集合,则可能导致此错误的发生。这是因为List<T>
是通过引用传递的,因此您将对当前正在枚举的集合执行操作。
以下将导致问题:
void Main()
{
Lack(Cards, 0);
}
public List<string> Cards = Enumerable.Range(0,10).Select(x => x.ToString()).ToList();
public void Lack(List<string> cards, int playerIndex)
{
foreach (string card in cards)
{
ExcludeCard(card, playerIndex);
}
}
public void ExcludeCard(string card, int playerIndex)
{
Cards.Remove(card);
}