C# : IComparable<T> vs. IComparer<T>

IComparable

  1. Implemented by T
  2. Suited to ‘natural’ comparisons

IComparer

  1. Implemented by a custom comparer
  2. Allows ‘plugging in’ alternative comparisons
  3. Means you can have as many comparers as you want for T