在ForEach中添加或删除可观察的集合

时间:2017-06-09 14:10:52

标签: c# mvvm observablecollection

我不认为我可以修改可观察的品种'品种'在下面的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);
       }
 }

3 个答案:

答案 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