The non-generic IComparable
was added in version 1.1 before generics were introduced, while IComparer<T>
was added alongside generics in version 2.0.
The generic version is preferred for the same reason as all generic interfaces - it is safer and documents the intent more clearly. Struct types also do not need to be boxed when passed to a generic method, as they would be for one with an object
argument like IComparable.CompareTo
so there is also a performance benefit.