Detaillierte Erläuterung von Beispielen für foreach und yield in C#

黄舟
Freigeben: 2017-10-05 15:31:26
Original
2058 Leute haben es durchsucht

1. foreach

Der C#-Compiler konvertiert die foreach-Anweisung in die Methoden und Eigenschaften der IEnumerable-Schnittstelle.


foreach (Person p in persons)
 {
     Console.WriteLine(p);
 }
Nach dem Login kopieren

Die foreach-Anweisung wird in das folgende Codesegment analysiert.

Rufen Sie die GetEnumerator()-Methode auf, um eine Aufzählung des Arrays zu erhalten

In der while-Schleife wird die Schleife fortgesetzt, solange MoveNext() true zurückgibt

Verwendung das Current-Attribut für den Zugriff auf Elemente im Array


IEnumerator enumerator = persons. GetEnumerator(); while (enumerator.MoveNext())
 {
    Person p = (Person) enumerator.Current;
    Console.WriteLine(p);
}
Nach dem Login kopieren

2. Zwei Formen der Ertragsangabe:


Verwenden Sie eine Yield-Return-Anweisung, um ein Element der Sammlung zurückzugeben

yield return <expression>;yield break;
Nach dem Login kopieren
Die Methode oder Eigenschaft, die die Yield-Anweisung enthält, ist ein Iterator. Iteratoren müssen die folgenden Anforderungen erfüllen:

a Der Rückgabetyp muss IEnumerable, IEnumerable, IEnumerator oder IEnumerator sein.

b. Es darf keine Ref- oder Out-Parameter haben.

Die yield return-Anweisung darf sich nicht in einem Try-Catch-Block befinden. Die yield return-Anweisung kann sich im try-finally try-Block befinden


Die yield break-Anweisung kann sich im try-Block oder Catch-Block befinden, aber nicht befindet sich im „finally“-Block

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 ""; 
             }
Nach dem Login kopieren
Bei den folgenden Beispielen handelt es sich um Code, der die yield return-Anweisung verwendet, um eine einfache Sammlung zu implementieren, und die foreach-Anweisung verwendet, um die Sammlung zu iterieren


Verwenden der yield return-Anweisung, um die Sammlung auf unterschiedliche Weise zu iterieren. Klasse:

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";
        }
    }
}
Nach dem Login kopieren


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];
            }
        }
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Beispielen für foreach und yield in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage