Довольно часто приходится передавать IComparer<> в разные методы.
Для пользовательских классов приходится создавать класс, наследовать и т.п., да еще и хранить ссылку на экземпляр отдельно
чтобы то и дело не было создания.
Когда намного проще было бы написать лямбду "на месте".
Написал такой класс:
public class CustomComparer<T> : IComparer<T>
{
private readonly Func<T, T, int> comparer;
private static CustomComparer<T> instance;
public int Compare(T x, T y)
{
return comparer(x, y);
}
public CustomComparer(Func<T,T,int> comparer)
{
this.comparer = comparer;
}
static CustomComparer<T> Create(Func<T,T,int> comparer)
{
return instance ?? (instance = new CustomComparer<T>(comparer));
}
}
юзать типа так:
CustomComparer<Lalala>.Create((l1, l2) => ...);
Думаю все понятно без комментариев.
Теперь вопрос: тыкните меня в стандартное решение из BCL, свой велосипед конечно самый крутой всегда, но все же я предпочитаю использовать стандартное апи. Или каждый сaм этот лесопед пишет?
28.06.11 19:52: Перенесено модератором из '.NET' — TK