По набору названий полей или методов класс генерит динамический Comparison<T> используя который потом можно чего-нибудь отсортировать.
Встроено два метода, зовущие стандартные Array.Sort() и List<>.Sort();
Можно указывать поля вложенных объектов, главное чтоб то, по чему сортируем, реализовывало CompareTo(). (С nullable`ами не работает)
Ну в примере все видно.
Хранит все однажды сгенеренные методы в словаре.
Работает, конечно, медленнее чем не динамические методы, но не в 2а раза.
Особенно полезен, когда заранее не известны ни тип сортируемых объектов ни критерий.
Пользоваться так:
public class Tst
{
public int field1 = 1;
public string field2 = "field2";
public double prop1
{ get { return (double)field1; } }
public DateTime method1()
{ return DateTime.Now; }
}
Tst[] tst; //List<Tst> tst;
ILRSort.Sort(tst, "field1");
ILRSort.Sort(tst, "field2[desc]"); //descending
ILRSort.Sort(tst, "prop1, method1()[desc], field2");
ILRSort.Sort(tst, "prop1, method1().Ticks.ToString()[desc]");
ILRSort.Sort(tst, "prop1, prop1,prop1,prop1,prop1 "); // и т.д.
ILRSort.Sort(tst, "method1().ToShortDateString().GetHashCode().ToString().Length.ToString()");//и т.п