我不认为我可以修改可观察的品种'品种'在下面的foreach循环中 - 只要条件在'如果'满足'删除'如果仍然有大部分集合需要通过,那么foreach就会存在。
我对其进行了更改,以便如果符合条件而不是从变量中删除它会将变量添加到新列表中,但是只要第一次满足条件,foreach就会存在。
我错过了什么吗?
foreach (Variety variety in varieties)
{
if (variety.Type != main.Type && variety.Type != null)
{
varieties.Remove(variety);
}
}
更改了代码:
foreach (Variety variety in varieties)
{
if (variety.Type == main.Type || variety.Type == null)
{
FilteredVarieties.Add(variety);
}
}
答案 0 :(得分:0)
您无法修改foreach中的源集合。如果你真的想要修改,请尝试在foreach中循环复制并在其中进行修改。
var sourcecopy=varieties;
foreach (Variety variety in sourcecopy)
{
if (variety.Type != main.Type && variety.Type != null)
{
varieties.Remove(variety);
}
}
答案 1 :(得分:0)
您无法在foreach
循环中删除集合中的项目。当你说foreach
时,它实际上是在创建一个从0到集合原始计数的for
循环。因此,一旦删除了某些内容并且集合的计数发生了变化,循环的范围就不会更新。
如果你切换到正常的for
循环,你应该很好。
答案 2 :(得分:0)
正如其他人(和编译器)可能已经说过的那样,你不能以这种方式改变你所枚举的集合。但是,如果您Map
定义中的.ToList()
集合,则实际上是枚举了列表的副本,因此可以自由删除或添加到原始列表中。
foreach