从列表中删除字段等于某些项目字段的项目

时间:2018-12-11 06:17:46

标签: c# list removeall

这是我的代码:

public class Person
{
    public int age;
    public int grade;
    public string name;
}

List<Person> _list = new List<Person>();
// .... add lots of items
var personToRemove = new Person {age = 99, grade = 7, };

如何编写从_list中删除与age具有相同gradepersonToRemove值的所有人的命令。

3 个答案:

答案 0 :(得分:8)

您必须使用.RemoveAll()和谓词一起删除personToRemove人物对象中所有具有匹配详细信息的人物。

所以您的查询将会是。

int totalRemoved = _list.RemoveAll(x => x.age == personToRemove.age && x.grade == personToRemove.grade);

输入:

_list.Add(new Person { age = 99, grade = 7 });
_list.Add(new Person { age = 87, grade = 7 });
_list.Add(new Person { age = 57, grade = 8 });

输出:

enter image description here

编辑:

您还可以使用传统循环来优雅地将匹配的人从人员列表中删除。

for (int i = _list.Count - 1; i >= 0; i--)
{
    if (_list[i].age == personToRemove.age && _list[i].grade == personToRemove.grade)
    {
        _list.RemoveAt(i);
        break;
    }
}

答案 1 :(得分:0)

您可以使用where方法过滤出结果

List <Person> _list = new List <Person> ();
// .... add lots of items
var personToRemove = new Person {
  age = 99, grade = 7,
};
_list.Add(new Person {
  age = 99, grade = 7
});
_list.Add(new Person {
  age = 99, grade = 7
});
_list.Add(new Person {
  age = 99, grade = 8
});
_list.Add(new Person {
  age = 100, grade = 8
});

var result = _list.Where(a => a.age != personToRemove.age || a.grade != personToRemove.grade);

答案 2 :(得分:0)

由于您正在查找没有list.RemoveAll的其他内容。您可以使用list.Except方法

List<Person> _list = new List<Person>();

// get the list of Person you want to remove by using where.
List<Person> _Removelist = _list.Where(x => x.age == personToRemove.age && x.grade == personToRemove.grade).ToList();

List<Person> _finalList = _list.Except(_Removelist ).ToList();