Plongée en profondeur dans les boucles foreach en C# : quelles classes peuvent être utilisées ?
La boucle foreach en C# est une fonctionnalité essentielle qui permet aux programmeurs de parcourir facilement les éléments d'une collection. Cependant, comprendre quelles classes peuvent utiliser les boucles foreach est essentiel pour une utilisation efficace.
Classes prenant en charge la boucle foreach
Toutes les classes ne prennent pas en charge les boucles foreach. Seules les classes qui remplissent certaines conditions peuvent utiliser la boucle foreach. D'après la réponse, la clé est qu'il existe une méthode publique GetEnumerator()
dans la classe. Cette méthode doit renvoyer un objet avec des bool MoveNext()
méthodes et des Current
propriétés de type T .
Méthodes de mise en œuvre courantes
En fait, l'interprétation la plus courante de cette exigence est d'implémenter l'interface IEnumerable
/IEnumerable<T>
. Ces interfaces nécessitent respectivement la présence de IEnumerator
/IEnumerator<T>
.
Structures de données prises en charge
Les classes qui implémentent l'interface ICollection
/ICollection<T>
prennent également implicitement en charge les boucles foreach. Cela inclut les types de collections standard tels que Collection<T>
, List<T>
et les tableaux (T[]). Par conséquent, les « collections de données » les plus couramment utilisées peuvent être parcourues à l’aide d’une boucle foreach.
Comment fonctionne la boucle foreach
Une boucle foreach, telle que foreach (int i in obj) { ... }
, ressemble en interne à la structure de code suivante :
<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>
Variations et notes
IDisposable
, il sera appelé comme un bloc using
pour garantir une élimination appropriée. int i
) était placée à l'extérieur du corps de la boucle à partir de C# 5.0, elle est déclarée à l'intérieur du corps de la boucle ; Cette distinction devient importante lors de l'utilisation de variables de boucle dans des méthodes anonymes imbriquées ou des expressions 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!