Компаратор
От: G-Host  
Дата: 27.06.11 17:40
Оценка:
Довольно часто приходится передавать 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.