As I looked over all the methods in Algorithms, it seemed like I needed to be more disciplined in naming conventions so that the operations of methods would be more consistent and easy to understand. So I developed a nomenclature that I could attempt to use consistently across all the methods in Algorithms. Here's what I came up with:

First: Indicates that a method returns the first item of some subset of items.

Last: Indicates that a method returns the last item of some subset of items.

Index (plural: Indices): Indicates that a method returns the index in a list.

At: Indicates that a method operates at a particular index in a list.

Is: Indicates that a method returns a boolean value.

Try: Indicates that a method returns a boolean value, indicating if the operation was successful or not. Uses an out parameter to return the value upon success.

Where: Indicates that a method takes a Predicate to restrict an operation to items where the predicate is true.

Many: Indicates that a method operates on a (non-consecutive) collection of items passed as a parameter.

Range: Indicates that method operates on a consecutive range of items in the collection.

Set: Indicates that method operates on the item without regard to order.

All: Used SPARINGLY, since it is confusing what it refers to. When used, indicates all of the items currently in the collection.

There are a number of renamings in Algorithms in the latest drop to conform to this nomenclature.

Also, I added two new methods that return IEqualityComparer instances: GetCollectionEqualityComparer and GetSetEqualityComparer. These methods create IEqualityComparer instances that compare entire collections as single items. These are useful, for example, if you want a collection of items to be a key for a Dictionary. GetCollectionEqualityComparer compares collections with order to items being significant, GetSetEqualityComparer compares collections as insignificant to order.