.NET: Como criar um IComparer a partir de um Comparison anónimo

Há várias funções em .NET que requerem um IComparer e não aceitam um delegate Comparison, quer seja anónimo ou não. No entanto, a partir do .NET 4.5 há um novo método para criar um Comparer<T> a partir de um Comparison<T> anónimo.

As funções anónimas não só nos poupam ao esforço de escrever uma classe e um método à parte, mas também mantêm o código visível no mesmo sítio onde é usado. É óbvio que isto só é conveniente quando o código é curto e só é usado uma vez.

Com isto em mente, podem criar um comparador usando o método Comparer<T>.Create e passando um delegate anónimo Comparison<T>.

Vejam o seguinte exemplo que ordena uma enumeração por duas propriedades diferentes.

var result = people.OrderBy(p => p,
    Comparer<Person>.Create((p1, p2) =>
    {
        int birthday = p1.Birthday.CompareTo(p2.Birthday);
        
        if (birthday != 0)
        {
            return birthday;
        }
        
        return p1.Name.CompareTo(p2.Name);
    }));
Nuno Freitas
Publicado por Nuno Freitas em 12 março, 2014

Artigos relacionados