Maison > développement back-end > C++ > Quelles classes en C# prennent en charge les boucles Foreach ?

Quelles classes en C# prennent en charge les boucles Foreach ?

Linda Hamilton
Libérer: 2025-01-10 08:43:43
original
979 Les gens l'ont consulté

What Classes in C# Support Foreach Loops?

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

Variations et notes

  1. Support IDisposable : Si l'énumérateur (tmp) implémente IDisposable, il sera appelé comme un bloc using pour garantir une élimination appropriée.
  2. Emplacement de la déclaration : Avant C# 5.0, la déclaration d'une variable de boucle (telle que 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!

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