List<T> реализует интерфейс IReadOnlyCollection<T> и предоставляет метод AsReadOnly(), который возвращает ReadOnlyCollection<T> (который, в свою очередь, реализует IReadOnlyCollection<T>).
Каково использование/причина для AsReadyOnly()? Его существование пахнет одним или двумя краевыми случаями, когда просто вернуть список как IReadOnlyCollection<T> просто недостаточно.
Сначала, хотя это может быть связано с тем, чтобы избежать извлечения стоимости, но похоже, что вы можете сделать это с помощью ReadOnlyCollection<T> Items accessor.
BTW. Документация для типа ReadOnlyCollection<T> читает
Предоставляет базовый класс для общей коллекции только для чтения.
который в моей голове конфликтует с конструктором, описанным как
Инициализирует новый экземпляр класса (...), который является оболочкой только для чтения вокруг указанного списка.
Update:
Я не видел, что ReadOnlyCollection<T> Items защищен.