I did a review on CollectionBase, ListBase, DictionaryBase (and their read-only equivalents), and realized that a lot of the delegate-based methods that were added to List<T> really made sense on these classes. If you used these classes as bases to create your own collections, you now get a bunch more functionality “for free”.

I decided that it was best to use the exact same names that Microsoft used, even though I don't think that are the best possible names. This should easy the learning curve and make things more consistent for the user.

Doing this also allow removal of a lot of equivalent methods from the specific collection classes like Set, Bag, etc.

The new methods added are:

CollectionBase.AsReadOnly
CollectionBase.Exists
CollectionBase.TrueForAll
CollectionBase.FindAll
CollectionBase.RemoveAll
CollectionBase.ForEach
CollectionBase.ConvertAll
CollectionBase.CountWhere
DictionaryBase.AsReadOnly
ListBase.AsReadOnly
ListBase.CopyTo
ListBase.FindFirst
ListBase.FindLast
ListBase.TryFindFirst
ListBase.TryFindLast
ListBase.FindAll
ListBase.FindIndex
ListBase.FindLastIndex
ListBase.IndexOf
ListBase.LastIndexOf

(and read-only equivalents, where applicable).