Reputation: 16219
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
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
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
Reputation: 60503
or
var nameToRemove = new[]{"ABS", "XYZ", "APO"};
MyList.RemoveAll(t => nameToRemove.Contains(t.Name))
Upvotes: 7
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