Подтвердить что ты не робот

Почему так много именных коллекций в .NET не реализуют IEnumerable <T>?

Случайный пример:

ConfigurationElementCollection

.Net имеет тонны этих маленьких WhateverCollection классов, которые не реализуют IEnumerable<T>, что означает, что я не могу использовать Linq для объектов с ними из коробки. Даже до Linq вы могли бы подумать, что они хотели бы использовать дженерики (которые были введены полностью на С# 2, я считаю)

Кажется, я все время сталкиваюсь с этими раздражающими маленькими типами коллекций. Есть ли какая-то техническая причина?

4b9b3361

Ответ 1

Ответ в заголовке вопроса: "Именованные коллекции". Каким образом вам приходилось делать сборки типов безопасными до того, как дженерики стали доступны. Их много в коде, который восходит к .NET 1.x, особенно Winforms. Не было разумного способа переписать их с помощью дженериков, которые могли бы сломать слишком много существующего кода.

Таким образом, именованный тип коллекции является безопасным по типу, но rub is System.Collections.IEnumerator.Current, свойство типа Object. Вы можете Linqify эти коллекции, используя OfType() или Cast().

Ответ 2

Как уже сказал Адам Хилдсворт в комментарии, вам просто нужно использовать метод Cast < > .

Пример:

var a = new DogCollection();
var allFidos = a.Cast<Dog>().Where(d => d.Name == "Fido");