Класс 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> вместо.

Другие вопросы по тегам