Maison > développement back-end > C++ > IEnumerable et IEnumerator en C# : comment activent-ils les boucles foreach et les itérateurs personnalisés ?

IEnumerable et IEnumerator en C# : comment activent-ils les boucles foreach et les itérateurs personnalisés ?

Patricia Arquette
Libérer: 2025-01-09 12:51:41
original
669 Les gens l'ont consulté

IEnumerable and IEnumerator in C#: How Do They Enable foreach Loops and Custom Iterators?

Compréhension approfondie de IEnumerable et IEnumerable : le mécanisme de base des itérateurs .NET

Dans la programmation .NET, l'implémentation de l'interface IEnumerable est la clé pour activer les boucles foreach. Bien que la syntaxe foreach soit concise et facile à utiliser, sa dépendance sous-jacente repose sur les interfaces IEnumerable et IEnumerator.

Scénarios d'application de IEnumerable et IEnumerable

IEnumerable n'est pas utilisé pour "remplacer" foreach au contraire, l'implémentation de IEnumerable est une condition préalable à l'utilisation de foreach ; Lorsque vous écrivez une boucle foreach, le compilateur la convertit en une série d'appels aux méthodes MoveNext et Current d'IEnumerator.

La différence entre IEnumerable et IEnumerable

  • IEnumerable : définit une interface avec la méthode GetEnumerator, qui renvoie un IEnumerator.
  • IEnumerator : définit l'interface des méthodes MoveNext et Current. MoveNext déplace l'itérateur vers l'élément suivant de la séquence, tandis que Current renvoie l'élément actuel.

Pourquoi avons-nous besoin d'IEnumerable et d'IEnumerator ?

  • Itérateur personnalisé : En implémentant IEnumerable sur vos classes personnalisées, vous pouvez utiliser une boucle foreach pour parcourir ces classes.
  • Comprendre le mécanisme de l'itérateur : IEnumerator fournit un mécanisme de bas niveau pour parcourir une collection, vous permettant de contrôler le processus de traversée.
  • Collections génériques : Le compilateur C# utilise IEnumerable et IEnumerable pour créer des classes de collection génériques, telles que List et Dictionary.
  • Programmation asynchrone : IEnumerator peut être utilisé en conjonction avec le modèle de programmation asynchrone pour parcourir des séquences asynchrones.

implémente IEnumerable

Pour rendre une classe itérable, vous devez implémenter l'interface IEnumerable, ce qui nécessite d'implémenter la méthode GetEnumerator qui renvoie un IEnumerable.

Exemple

Considérez la classe d'objets personnalisés suivante qui implémente l'interface IEnumerable :

<code class="language-csharp">public class CustomCollection : IEnumerable<int>
{
    private int[] data;

    public IEnumerator<int> GetEnumerator()
    {
        return new CustomEnumerator(data);
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }

    private class CustomEnumerator : IEnumerator<int>
    {
        // MoveNext 和 Current 方法用于遍历 data
    }
}</code>
Copier après la connexion

En implémentant IEnumerable et en fournissant un énumérateur personnalisé, vous pouvez désormais utiliser une boucle foreach pour parcourir les instances d'une CustomCollection.

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