в дотнете без hkt в принципе контейнерную библиотеку нормально не сделать
вернее нормально с точки зрения более позднего фп подхода.
пока фп претензий не было, не-хкт иерархией интерфейсов вполне можно было пользоваться меняя что-то на месте. т.е. мы через интерфейс ICollection или IList что-то теребим в коллекции, а ссылка -то вот она, того же типа осталась.
потом начались линкострадания и сишарп сразу уперся в ограничения дженериков, потому что теперь то надо результат возвращать. а линковые функции в основном возвращают IEnumerable, стирая статическую информацию о типе коллекции.
ее только динамически можно попробовать кастануть, что внутри линк-ту-обджектс методов обычно и делают, чтоб как-то воспользоваться дополнительной информацией о коллекции для более быстрой работы с ней.
т.е. досвидания статика, привет динамический глюкодром
если надо что-то возращать, а не изменять на месте - дженерики без хкт уже не катят, все фп потуги в языке без хкт или похожего инструментария ничем хорошим не закончатся.
т.е. любая контейнераная библиотека с иерархией контейнерных интерфейсов будет костыльной, можно нормально сделать только контейнерную библиотеку с конкретным типом итератора/списка, либо сверточную, типоа пакета foldl или явовых стримов, но это довольно ограниченные, маломощные и устаревшие подходы