Oggi avevo la necessità di ordinare una lista di oggetti custom, creata attraverso la lista generica List. L'ordinamento però, prima lo dovevo fare su una particolare proprietà, poi su un altra.
Solitamente creavo un comparer personalizzato, ma ho trovato un modo veramente molto più veloce e leggibile.
Al metodo Sort() di tale lista, è possibile passare un delegato ed effettuare la comparazione dei valori in-line, sulle proprietà dei propri elementi custom.
Quindi, a fronte di un oggetto del genere:

public class CustomItem

{
public DateTime Date { get; set; }
public double Value { get; set; }
}

Ecco come possiamo rapidamento effettuare il sorting degli elementi, su proprietà diverse:

List<CustomItem> list = new List<CustomItem>();


list.Add(new CustomItem() { Date = DateTime.Now, Value = 1.0 });
list.Add(new CustomItem() { Date = DateTime.Now.AddYears(1), Value = 0.5 });

//sort sulla data list.Sort(delegate(CustomItem item1, CustomItem item2)
{
return item1.Date.CompareTo(item2.Date);
});

//sort su un double list.Sort(delegate(CustomItem item1, CustomItem item2)
{
return item1.Value.CompareTo(item2.Value);
});


Il tutto senza dover creare un comparer ad hoc.
A mio parere, è una tecnica semplice e che velocizza notevolmente il lavoro.