Maison > développement back-end > C++ > Qu'est-ce qui rend une classe C# itérable à l'aide d'une boucle Foreach ?

Qu'est-ce qui rend une classe C# itérable à l'aide d'une boucle Foreach ?

Patricia Arquette
Libérer: 2025-01-10 08:39:43
original
851 Les gens l'ont consulté

What Makes a C# Class Iterable Using a Foreach Loop?

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal