L'objectif principal d'un IEnumerable
est pas de reporter l'exécution à plus tard. Le but d'un IEnumerable
est de fournir un moyen d'itérer sur les parties d'un objet. Ces parties peuvent être les éléments d'une liste, mais elles peuvent aussi être (par exemple) les caractères d'un string
. L'interface IEnumerable
existe car toutes les classes qui autorisent l'itération sur ses parties ne sont pas une collection ou une liste (string
) et IEnumerable
fournit une interface minimale pour y parvenir sans avoir à implémenter un ICollection
ou IList
complet.
Le consommateur principal et le plus important d'un IEnumerable
est la déclaration foreach
, qui est là depuis le début de
temps
.NET. Ce n'est que plus tard que LINQ est apparu avec la classe Enumerable
qui s'appuie également sur l'interface IEnumerable
(ou plus précisément sur l'interface IEnumerable<T>
).
En parlant de LINQ, l'exécution différée à laquelle vous faites référence dans votre question est en effet une caractéristique clé de LINQ. Cela signifie qu'une requête que vous définissez n'est pas exécutée jusqu'à ce que l'itération du IEnumerable
soit effectuée. Cela vous permet d'affiner davantage vos requêtes avant de les exécuter.
Cette exécution différée mais seulement fait référence à comment leIEnumerable
est utilisé, pas ce qu'il fait. exécution différée signifie que vous ne commencez à itérer sur la IEnumerable
lors de la définition, mais à un autre endroit dans le programme, par exemple un foreach
, un ToList
etc.
L'avantage est le même que pour * chaque * interface pour fournir le moins d'informations possible à l'appelant. Donc, au lieu de dire à un membre «j'ai besoin d'un tableau pour fonctionner correctement», vous pouvez également dire: «J'ai besoin d'une sorte de collection que je peux énumérer». Cela n'a donc pas d'importance si c'est en fait un tableau, une liste ou même un flux en (infini). – HimBromBeere
'IEnumerable' est principalement sur la possibilité d'itérer par zéro ou plusieurs instances de 'T' - il n'y a rien d'implicite à propos des énumérables qui permet une exécution différée. Il arrive, cependant, que LINQ fournit un ensemble d'opérateurs qui permettent l'exécution différée sur les énumérables. Ce sont deux choses différentes. –
Enigmativity