Search code examples
c#lambdaicomparable

Rewriting an IComparer to use a lambda expression


I'm trying to rewrite my IComparer<Animal> to use a lambda expression, but I can't seem to get this done correctly

public class AnimalCarriageSorter : IComparer<Animal>
{
    public int Compare(Animal animal, Animal targetAnimal)
    {
        //Compare diet first.
        if (animal.FoodDiet.CompareTo(targetAnimal.FoodDiet) != 0) 
        {
            return animal.FoodDiet.CompareTo(targetAnimal.FoodDiet);
        }

        //Compare size.
        return targetAnimal.Size.CompareTo(animal.Size);
    }
}

Solution

  • You could easily rewrite it using Func<Animal, Animal, int> instead of the IComparer<Animal>, e.g.

    Func<Animal, Animal, int> comparer = (x, y) => 
        x.FoodDiet.CompareTo(y.FoodDiet) != 0 ? 
            x.FoodDiet.CompareTo(y.FoodDiet) : 
            x.Size.CompareTo(y.Size)