C# 在列表中过滤

C# 在列表中过滤,c#,C#,首先,我用一些具有不同属性的对象填充列表,然后我想从列表中删除所有不合适的对象。 当然,它会抛出一个异常,表示列表已被修改,并导致枚举问题。如何在不使用其他列表(例如ListFilterd)的情况下管理此项并删除所有不合适的对象,我可以在其中添加所有合适的对象 MyList.Add(new Houses() { Number = "04" }); MyList.Add(new Houses() { Number = "01" }); MyList.Add(new Houses() { Numbe

首先,我用一些具有不同属性的对象填充列表,然后我想从列表中删除所有不合适的对象。 当然,它会抛出一个异常,表示列表已被修改,并导致枚举问题。如何在不使用其他列表(例如ListFilterd)的情况下管理此项并删除所有不合适的对象,我可以在其中添加所有合适的对象

MyList.Add(new Houses() { Number = "04" });
MyList.Add(new Houses() { Number = "01" });
MyList.Add(new Houses() { Number = "02" });
MyList.Add(new Houses() { Number = "04" });
MyList.Add(new Houses() { Number = "04" });
foreach (var item in MyList)
{
    if (item.Number != "04")
    {
        MyList.Remove(item);
    }
}
List
有一个接受谓词的方法。您可以这样使用它:

MyList.RemoveAll(x=>x.Number != "04");
使用直接法

MyList.RemoveAll(val=>val.Number != "04");

使用linq
Where
在一行中执行此操作
var res=MyList.Where(i=>i==“04”).ToList()
在使用
foreach
对列表进行迭代时,不能修改列表。就像@dcg说你应该只使用LINQ一样。@dcg:这使用了OP说他们不想要的另一个列表。幸运的是,列表中有一个方法可以删除您传递的谓词定义的所有内容,我认为它的性能比LINQ方法要好。故事的寓意——在回到LINQ之前,检查是否已经有了一种方法来做你想做的事情。是的,这很有效!非常感谢。