Neo
Neo

Reputation: 16219

How to Remove multiple items in List using RemoveAll on condition?

I tried like following.

MyList.RemoveAll(t => t.Name == "ABS");
MyList.RemoveAll(t => t.Name == "XYZ");
MyList.RemoveAll(t => t.Name == "APO");

Instead how can I do something like:

MyList.RemoveAll(t => t.Name == "ABS" || t => t.Name == "XYZ" ||t => t.Name == "APO");

Upvotes: 23

Views: 65941

Answers (4)

Norman
Norman

Reputation: 73

If it's not required at any time that there are multiple items in the list, you should consider using a HashSet instead of List

Upvotes: 1

MikeW
MikeW

Reputation: 1620

A more extnsible approach would be to have a List for what to remove then

List<T> toRemove = ...
MyList.RemoveAll(t =>  toRemove.Contains(t.Name));

where T is a string in your example

Upvotes: 30

Rapha&#235;l Althaus
Rapha&#235;l Althaus

Reputation: 60503

or

var nameToRemove = new[]{"ABS", "XYZ", "APO"};
MyList.RemoveAll(t => nameToRemove.Contains(t.Name))

Upvotes: 7

Jon Skeet
Jon Skeet

Reputation: 1501153

You only need one lambda expression - the || goes within that:

MyList.RemoveAll(t => t.Name == "ABS" || t.Name == "XYZ" || t.Name == "APO");

In other words, "Given a t, I want to remove the element if t.Name is ABS, or if t.Name is XYZ, or if t.Name is APO."

There's only one "given a t" in there, which is what the t => part means, effectively.

Upvotes: 43

Related Questions