Explication détaillée d'exemples de foreach et de rendement en C#

黄舟
Libérer: 2017-10-05 15:31:26
original
2058 Les gens l'ont consulté

1. foreach

Le compilateur C# convertira l'instruction foreach en méthodes et propriétés de l'interface IEnumerable.


foreach (Person p in persons)
 {
     Console.WriteLine(p);
 }
Copier après la connexion

L'instruction foreach sera analysée dans le segment de code suivant.

Appelez la méthode GetEnumerator() pour obtenir une énumération du tableau

Dans la boucle while, tant que MoveNext() renvoie true, la boucle continuera

Utilisez l'attribut Current pour accéder aux éléments du tableau


IEnumerator enumerator = persons. GetEnumerator(); while (enumerator.MoveNext())
 {
    Person p = (Person) enumerator.Current;
    Console.WriteLine(p);
}
Copier après la connexion

2. déclaration de rendement

Deux formes de déclaration de rendement :


yield return <expression>;yield break;
Copier après la connexion

Utilisez une instruction rendement return pour renvoyer un élément de la collection

La méthode ou la propriété contenant l'instruction rendement est un itérateur. Les itérateurs doivent répondre aux exigences suivantes

a. Le type de retour doit être IEnumerable, IEnumerable, IEnumerator ou IEnumerator.

b. Il ne peut pas avoir de paramètres ref ou out

L'instruction rendement return ne peut pas être dans un bloc try-catch. L'instruction Yield Return peut être située dans le bloc try-finally try


try
              {                  // ERROR: Cannot yield a value in the boday of a try block with a catch clause
                 yield return "test";
              }             catch
             { } 
              try
             {                 // 
                 yield return "test again";
             }             finally
             { } 
             try
             { }             finally
             { 
                 // ERROR: Cannot yield in the body of a finally clause
                yield return ""; 
             }
Copier après la connexion

L'instruction Yield Break peut être située dans le bloc try ou catch, mais ne peut pas être situé dans le bloc final

Les exemples suivants sont du code qui utilise l'instruction rendement return pour implémenter une collection simple et utilise l'instruction foreach pour itérer la collection


using System;using System.Collections.Generic;namespace ConsoleApplication6
{    class Program
    {        static void Main(string[] args)
        {
            HelloCollection helloCollection = new HelloCollection();            foreach (string s in helloCollection)
            {
                Console.WriteLine(s);
                Console.ReadLine();
            }
        }
    }    public class HelloCollection
    {        
        public IEnumerator<String> GetEnumerator()
        {            // yield return语句返回集合的一个元素,并移动到下一个元素上;yield break可以停止迭代
            yield return "Hello";            yield return "World";
        }
    }
}
Copier après la connexion

Utilisez l'instruction rendement-retour pour parcourir la collection de différentes manières. Classe :


using System;using System.Collections.Generic;namespace ConsoleApplication8
{    class Program
    {        static void Main(string[] args)
        {
            MusicTitles titles = new MusicTitles();            foreach (string title in titles)
            {
                Console.WriteLine(title);
            }
            Console.WriteLine();            foreach (string title in titles.Reverse())
            {
                Console.WriteLine(title);
            }
            Console.WriteLine();            foreach (string title in titles.Subset(2, 2))
            {
                Console.WriteLine(title);
                Console.ReadLine();
            }
        }
    }    public class MusicTitles
    {        string[] names = { "a", "b", "c", "d" };        public IEnumerator<string> GetEnumerator()
        {            for (int i = 0; i < 4; i++)
            {                yield return names[i];
            }
        }        public IEnumerable<string> Reverse()
        {            for (int i = 3; i >= 0; i--)
            {                yield return names[i];
            }
        }        public IEnumerable<string> Subset(int index, int length)
        {            for (int i = index; i < index + length; i++)
            {                yield return names[i];
            }
        }
    }
}
Copier après la connexion

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal