Compréhension approfondie de la boucle foreach en C#
La boucle foreach
en C# est une construction de langage puissante qui permet aux développeurs de parcourir les éléments d'une collection facilement et efficacement. Mais que doit exactement satisfaire une classe pour pouvoir utiliser la boucle foreach
?
Classe itérable
Toute classe qui implémente l'interface IEnumerable
peut être itérée à l'aide d'une boucle foreach
. Techniquement, la classe doit uniquement fournir une méthode MoveNext()
qui renvoie un objet avec une méthode Current
et une propriété GetEnumerator()
, mais l'implémentation de IEnumerable
est le moyen le plus courant de fournir cette fonctionnalité.
Types de collections courants
Les types de collections standard, tels que Collection<T>
, List<T>
et les tableaux (T[]), implémentent tous l'interface ICollection
ou IEnumerable
, permettant leur utilisation dans les boucles foreach
. En effet, ces types représentent des collections de données pouvant être énumérées.
Comment fonctionne la boucle foreach
Une boucle foreach (int i in obj)
similaire à foreach
se traduit grossièrement par le code suivant :
<code class="language-csharp">var tmp = obj.GetEnumerator(); int i; // C# 4.0 之前 while (tmp.MoveNext()) { int i; // C# 5.0 及以后 i = tmp.Current; // 你的代码 }</code>
tmp
La variable stocke l'énumérateur, qui est responsable du parcours de la collection. A chaque itération, la méthode MoveNext()
avance l'énumérateur à l'élément suivant, tandis que l'attribut Current
renvoie l'élément actuel (qui est affecté à la variable de boucle, comme i
dans notre exemple).
Variations et sorties
En fonction de l'implémentation, les enquêteurs peuvent prendre en charge l'interface IDisposable
. Si tel est le cas, C# libérera automatiquement l'énumérateur en utilisant le modèle using
à la fin de la boucle. Il est important de noter qu'en C# 5.0, la déclaration de la variable de boucle (int i) a été déplacée à l'intérieur de la boucle, ce qui est crucial si vous envisagez d'utiliser la variable dans une méthode anonyme ou une expression lambda.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!