boucle foreach en C#
Q : Quels types d'objets prennent en charge la boucle foreach ?
Réponse : L'utilisation principale de la boucle foreach
nécessite une méthode MoveNext()
qui renvoie un objet avec une méthode Current
et une propriété GetEnumerator()
. En termes simples, les types les plus courants sont ceux qui implémentent IEnumerable
/IEnumerable<T>
. Cela inclut les implémentations de ICollection
/ICollection<T>
, telles que Collection<T>
, List<T>
, les tableaux, etc.
Comment ça marche ?
Une foreach(int i in obj) {...}
boucle de la forme foreach
est essentiellement équivalente à :
<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>
IEnumerator
(tmp
) est utilisé pour parcourir les éléments de la collection et les affecter à la variable de boucle à chaque itération. Si l'enquêteur prend en charge la méthode Dispose()
, elle est appelée comme si vous utilisiez l'instruction using
.
Remarque : L'emplacement de la déclaration de variable de boucle "int i
" diffère entre C# 4.0 et C# 5.0. C# 5.0 le déclare à l'intérieur de la boucle, tandis que C# 4.0 le déclare en dehors de la boucle. Cette distinction est importante lors de l'utilisation de variables de boucle dans des fermetures ou d'expressions lambda dans des boucles.
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!