Search code examples
c#sortingcompareicomparable

C# - How to implement multiple comparers for an IComparable<T> class?


I have a class that implements IComparable.

public class MyClass : IComparable<MyClass>
{
    public int CompareTo(MyClass c)
    {
        return this.whatever.CompareTo(c.whatever);
    }

    etc..
}

I then can call the sort method of a generic list of my class

List<MyClass> c = new List<MyClass>();
//Add stuff, etc.

c.Sort();

and have the list sorted according to my comparer.

How do i specify further comparers to sort my collection different ways according to the other properties of MyClass in order to let users sort my collection in a number of different ways?


Solution

  • To setup the sort in your class:

    public static Comparison<MyClass> OtherComparison = delegate(MyClass object1, MyClass object2)
    {
        return object1.Whatever.CompareTo(object2.Whatever);
    };
    

    Then to sort using your new comparison:

    List<MyClass> myClassList = new List<MyClass>();
    myClassList.Sort(MyClass.OtherComparison);
    

    Except you clearly will not want to sort an empty list :)