@IndependenceLetter

Почему необходимо приводить те или иные множества к IEnumerable? И Как использовать IReadOnlyCollection?

1. Много где видел, что бест практис это приводить те или иные множества к IEnumerable, не совсем понимаю зачем и где вообще это нужно применять? К примеру у меня есть класс в котором использую List и мне нужно выдать его наружу. Мне выдавать IEnumerable или List всё ж. При передачи в методах коллекций, я так понимаю лучше именно абстракцию использовать(IEnumerable), чтобы не привязываться к List'у?

2. В каких ситуациях использовать IReadOnlyCollection и его производные??

Буду благодарен!
  • Вопрос задан
  • 262 просмотра
Решения вопроса 3
freeExec
@freeExec
Участник OpenStreetMap
Да просто пытаются защитить коллекцию от модификации. Когда ты на выходе получишь IEnumerable, то ты не изменить, не добавить элементы не можешь. Да и в большинстве случаев ты потом результат всё равно как последовательность обрабатываешь.
Ответ написан
Комментировать
shai_hulud
@shai_hulud
Принимай наиболее общие типы, отдавай наиболее специфичные.
На вход:
1) Если надо только перебрать элементы один раз то IEnumerable
2) Если нужен Count то IReadOnlyCollection
3) Если нужен индекс то IReadOnlyList
4) Если нужна запись, то ICollection или IList

На выход:
Наиболее специфичный тип. List<>, ReadOnlyCollection<>
Ответ написан
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
да фигня это все
IEnumerable<T> нужен тогда и только тогда, когда нужны асинхроннные или ленивые вычисления, по тому что метод возвращающий IEnumerable<T>, имеет право возвращать не весь набор, а возвращать экземпляры T поштучно, вот так
yield return (T)foo;
а вот уже эта фича, открывает много новых и интересных возможностей для параллельного программирования
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы