Категории
Войти
Поиск
Реклама
Полезное:
Новые статьи
Опечатка?
Выделите текст и нажмите Shift+Enter.
И мы в ближайшее время ее исправим!
Счетчики
| Добавление к коллекции функций поиска |
|
Следующий вид функциональных возможностей, которые мы добавим достаточно просто - это возможность поиска в коллекции для нахождения конкретного объекта Customer. Существует, конечно, множество различных алгоритмов, которые можно применить для выполнения поиска, и множество различных подходов к определению совпадения. Метод Find интерфейса IBindingList предназначен для поиска объекта в коллекции с указанием того, какое свойство объектов следует проверять. Метод должен возвращать индекс объекта в коллекции, если найден такой, чье значение свойства совпадает с переданным методу ключом поиска. Для обеспечения возможности поиска нужно переопределить свойство SupportsSearchingCore и метод Find. Однако вместо того, чтобы и далее придерживаться специфического класса коллекции для заказчиков, вы хотите предусмотреть для сортировки и поиска обобщенную реализацию, которая может быть утилизирована для любого специального типа объекта. Для этого можно определить новый, производный от BindingList<T> обобщенный класс BindingListview<T>. В нем вы реализуете функции сортировки и поиска, а позднее реализуете интерфейс IBindingListView. Затем вы сможете произвести класс CustomerCollection от BindingListView<T>, специфицировав Customer в качестве типа т, как было сделано ранее с базовым классом BindingList<Customer>. После этого вы сможете пользоваться преимуществами реализованных функциональных возможностей обобщенным образом. Для начала построения класса воспользуйтесь следующим исходным определением, чтобы поддерживать поиск в коллекции: Пока класс BindingListview<T> делает следующее: 1. Определяет те же самые два конструктора, что определялись ранее для CustomerCollection - конструктор по умолчанию и параметризованный конструктор, позволяющий инициализировать список экземпляром List<T>. 2. Переопределяет свойство SupportsSearchingCore и возвращает true, показывая, что вы добавляете к классу коллекции эту возможность. 3. Переопределяет метод FindCore, который итерирует коллекцию, используя метод GetValue класса PropertyDescriptor, чтобы извлечь значение специфицированного свойства текущего объекта, и сравнивает его со значением ключа. Если они совпадают, метод FindCore возвращает индекс этого объекта в коллекции. Если совпадения не найдено, он по стандартному соглашению .NET возвращает. В загружаемом образце CustomBusinessObjects показана альтернативная реализация метода FindCore, которая использует метод Findlndex класса List<T>. Этот подход использует обобщения и анонимные делегаты, оставляя итерацию на усмотрение реализации List<T>. Оба подхода работают неплохо, хотя простую итерацию, показанную в этом коде, понять проще. Реализация List<T> включает поддержку для определения индексов, что позволяет достичь лучшей эффективности при поиске в больших коллекциях.
Newer news items:
Older news items:
|
