Есть ли какая-либо причина, чтобы открыть внутреннюю коллекцию как ReadOnlyCollection, а не IEnumerable, если вызывающий код выполняет только итерацию по коллекции?
class Bar
{
private ICollection<Foo> foos;
// Which one is to be preferred?
public IEnumerable<Foo> Foos { ... }
public ReadOnlyCollection<Foo> Foos { ... }
}
// Calling code:
foreach (var f in bar.Foos)
DoSomething(f);
Как я вижу, IEnumerable является подмножеством интерфейса ReadOnlyCollection, и он не позволяет пользователю изменять коллекцию. Поэтому, если достаточно IEnumberable-интерфейса, то это тот, который нужно использовать. Это правильный способ рассуждать об этом или я что-то упускаю?
Спасибо/Erik