Maison >développement back-end >C++ >Comment le mot clé C# « rendement » simplifie-t-il l'itération impérative ?

Comment le mot clé C# « rendement » simplifie-t-il l'itération impérative ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-27 17:31:10343parcourir

How Does the C# `yield` Keyword Simplify Imperative Iteration?

Comprendre C # 'S yield Mot-clé pour une itération efficace

introduit en C # 2.0, le mot clé yield rationalise considérablement l'itération impérative. Considérez cet exemple, illustrant son utilisation dans la création d'un IEnumerable<T>:

<code class="language-csharp">IEnumerable<object> FilteredList()
{
    foreach(object item in FullList)
    {
        if(IsItemInPartialList(item))
            yield return item;
    }
}</code>

Cette fonction ne construit pas de liste complète en mémoire. Au lieu de cela, il renvoie un itérateur. Chaque fois que la boucle foreach dans le code d'appel demande l'élément suivant, la fonction FilteredList() reprend l'exécution d'où elle s'était arrêtée, évaluant le prochain item et le renvoyant uniquement si la condition est remplie.

Examinons un exemple plus simple:

<code class="language-csharp">public void Consumer()
{
    foreach(int i in Integers())
    {
        Console.WriteLine(i);
    }
}

public IEnumerable<int> Integers()
{
    yield return 1;
    yield return 2;
    yield return 4;
    yield return 8;
    yield return 16;
    yield return 16777216;
}</code>

Le débogage de ce code révèle que Integers() ne s'exécute pas complètement en même temps. Il s'exécute uniquement jusqu'à ce qu'il atteigne un yield return, renvoyant une seule valeur. La prochaine itération de la boucle foreach dans Consumer() fait reprendre Integers(), en continuant à partir du prochain yield return.

Avantages clés de l'utilisation yield:

  • itération simplifiée: Évite la mise en œuvre manuelle de IEnumerable et IEnumerator, ce qui entraîne un code plus propre et plus concis.
  • Efficacité de la mémoire: Les valeurs sont générées à la demande, minimisant l'utilisation de la mémoire, en particulier bénéfique lorsqu'ils traitent de grands ensembles de données.
  • Amélioration de la lisibilité: L'intention du code devient plus claire, en particulier lors de la gestion des processus itératifs et du streaming des données. La logique pour générer la séquence est directement intégrée dans la méthode.

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!

Déclaration:
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