IEnumerable<T>
ausgesetzt ist, stellt eine zukunfts nur über einige Daten Cursor. Sie können vom Anfang bis zum Ende der Sammlung gehen und jeweils einen Gegenstand betrachten.
IReadOnlyList<T>
steht für eine lesbare Direktzugriffssammlung.
IEnumerable<T>
ist allgemeiner, in dem es Elemente im laufenden Betrieb, Daten über ein Netzwerk, Zeilen aus einer Datenbank usw. IReadOnlyList<T>
auf der anderen Seite stellt im Grunde nur In-Memory-Sammlungen darstellt darstellen kann.
Wenn Sie nur jedes Element einmal in der Reihenfolge betrachten müssen, dann ist IEnumerable<T>
die bessere Wahl - es ist allgemeiner.
Ich würde empfehlen, die C++ Standard Template Library zu betrachten - ihre Diskussion der verschiedenen Arten von Iteratoren ist ziemlich genau auf Ihre Frage abgebildet.