I need to remove multiple items from a Dictionary. A simple way to do that is as follows :
List<string> keystoremove= new List<string>(); foreach (KeyValuePair<string,object> k in MyCollection) if (k.Value.Member==foo) keystoremove.Add(k.Key); foreach (string s in keystoremove) MyCollection.Remove(s);
The reason why I can’t directly Remove the items in the foreach block is that this would throw an Exception ("Collection was modified…")
I’d like to do the following :
MyCollection.RemoveAll(x =>x.Member==foo)
But the Dictionary<> class doesn’t expose a RemoveAll(Predicate<> Match) method, like the List<> Class does.
What’s the best way (both performance wise and elegant wise) to do that?
Here’s an alternate way
Pushing the code into a list directly allows you to avoid the ‘removing while enumerating’ problem. The
.ToList()will force the enumeration before the foreach really starts.