Я немного запутался, почему Find (например) не доступен в IList, от которого наследуется List.
Хотя я не знаком с процессом принятия решения одизайнеры, есть несколько вещей, о которых они, вероятно, думали.
1) Если не помещать эти методы в IList, цель контракта будет понятнее. Согласно MSDN, IList "Представляет коллекциюобъектов, к которым можно получить индивидуальный доступ по индексу. "Добавление Find изменило бы контракт на доступную для поиска индексируемую коллекцию.
2) Каждый метод, добавляемый к интерфейсу, усложняет реализацию интерфейса. Если все эти методы были в IList, было бы гораздо утомительнее внедрить IList.Тем более, что:
3) Большинство реализаций этих методов будут одинаковыми. Find и несколько других в List действительно будут лучше размещены во вспомогательном классе.Например, ReadOnlyCollection, Collection, ObservableCollection и ReadOnlyObservableCollection.Если бы мне пришлось реализовать Find на всех этих (до LINQ), я сделал бы вспомогательный класс, который принимает IEnumerable и предикат и просто циклически перебирал коллекции и имел бы реализации, вызывающие вспомогательный метод.
4) LINQ (Не столько причина, почему этого не произошло, но и не то, почему она не нужна в будущем.) С LINQ и методами расширения все IEnumerable теперь «имеют» Find как расширение.метод (только они назвали его Где).