Класс CollectionBase все еще поддерживается?
Я хочу создать класс, который наследует от CollectionBase
, но, похоже, он не поддерживает расширения LINQ!
Это все еще поддерживается? Или есть альтернативное решение?
2 ответа
Это все еще поддерживается, но это устарело. Вы должны всегда предпочитать использовать коллекции, определенные в System.Collections.Generic
или System.Collections.ObjectModel
вместо этого пространства имен.
Вы также можете наследовать от одной из общих коллекций, чтобы создать свою собственную, строго типизированную коллекцию. И он будет иметь полную поддержку LINQ, так как они уже реализуют IEnumerable<T>
,
Или List<T>
или же Collection<T>
хорошие варианты для вашего случая.
Избегайте неуниверсальных коллекций, таких как CollectionBase
, ArrayList
, а также HashTable
если вообще возможно. Их использование снижает производительность, и они предлагают несколько преимуществ (если они есть!) По сравнению с общими версиями, которые были представлены в более поздних версиях платформы.
Расширения Linq написаны для IEnumerable<T>
(Generic) и CollectionBase (Non-generic) не наследуются от него. Вот почему вы не можете использовать Linq на нем.
использование System.Collections.ObjectModel.Collection<T>
вместо.