Класс CollectionBase все еще поддерживается? - PullRequest
9 голосов
/ 18 апреля 2011

Я хочу создать класс, который наследует от CollectionBase, но, похоже, он не поддерживает расширения LINQ!

Это все еще поддерживается? Или есть альтернативное решение?

Ответы [ 2 ]

25 голосов
/ 18 апреля 2011

Это все еще поддерживается , но оно устарело.Вместо этого следует всегда предпочитать использовать коллекции, определенные в пространствах имен System.Collections.Generic или System.Collections.ObjectModel.

Вы можете наследовать от одной из общих коллекцийсоздать свою собственную коллекцию со строгим контролем типов.И он будет иметь полную поддержку LINQ, поскольку они уже реализуют IEnumerable<T>.
Либо List<T>, либо Collection<T> - хорошие варианты для вашего случая.

Избегайте неуниверсальных коллекций, таких как CollectionBase, ArrayList и HashTable, если это вообще возможно.Их использование снижает производительность, и они предлагают несколько преимуществ (если таковые имеются!) По сравнению с общими версиями, которые были представлены в более поздних версиях платформы.

3 голосов
/ 18 апреля 2011

Расширения Linq написаны для IEnumerable<T> (универсальный), а CollectionBase (не универсальный) не наследуется от него. Вот почему вы не можете использовать Linq на нем.

Вместо этого используйте System.Collections.ObjectModel.Collection<T>.

...