Heim  >  Artikel  >  Backend-Entwicklung  >  Iteratoren in C#

Iteratoren in C#

王林
王林Original
2024-09-03 15:04:08566Durchsuche

Iteratoren sind die Methode, die zum Abrufen der Elemente verwendet wird und die Iteration einzeln in Arrays, Listen usw. durchführt. Die Yield-Return-Anweisung wird mit der Iterator-Methode verwendet, um das Element der Sammlung zurückzugeben, und Yield Break wird dazu verwendet Stoppen Sie die Iteration. Es speichert immer den aktuellen Standort und gibt das nächste Element zurück, wenn die nächste Iteration stattfindet. IEnumerable- und IEnumerator-Objektwerte sind der Rückgabetyp von yield. In diesem Thema lernen wir etwas über Iteratoren in C#.

C#-Iterator-Methoden

Im Folgenden finden Sie Beispiele zur Darstellung der Iteration mit verschiedenen Methoden wie der Schleife, der foreach-Schleife und Enumeratoren.

1. For-Schleife

Beispiel:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Iterators
{
class Iterator
{
static void Main(string[] args)
{
for (int i = 1; i <= 7; i++)
{
Console.WriteLine( i);
}
Console.WriteLine("Press Enter Key to Exit..");
Console.ReadLine();
}
}
}

Eine for-Schleife besteht aus drei Anweisungen. Zuerst wird die Initialisierung ausgeführt und dann die Bedingung, die ein boolescher Ausdruck ist. Danach wird der Iterator ausgeführt, um den Wert der initialisierten Variablen zu ändern. Dieser for-Schleifenprozess wird fortgesetzt, bis die Bedingung falsch ist. Wenn sie falsch ist, wird die for-Schleife beendet.

Ausgabe:

Iteratoren in C#

2. ForEach-Schleife

Beispiel:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Iterators
{
class Iterator
{
static void Main(string[]args)
{
string[] values = new string[3] { "John", "Bob", "Eva" };
foreach (string name in values)
{
Console.WriteLine(name);
}
Console.WriteLine("Press Enter Key to Exit..");
Console.ReadLine();
}
}
}

Eine foreach-Schleife innerhalb des Schlüsselworts wird zum Iterieren von Elementen verwendet. Das Schlüsselwort wird verwendet, um das Element bei jeder Iteration auszuwählen. Das erste Element wird iteriert und im Element nach dem zweiten Element gespeichert und so weiter. Die Anzahl der foreach-Iterationen hängt von der Anzahl der Elemente in der Sammlung ab. In diesem Beispiel besteht die Sammlung aus drei Werten, sodass die Anzahl der foreach dreimal erfolgt und die Werte angezeigt werden.

Ausgabe:

Iteratoren in C#

3. Enumeratoren

Beispiel #1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Iterators
{
class Iterator
{
public static IEnumerable<string> GetArray()
{
int[] array = new int[] { 12, 45, 56, 21, 4 };   // initializing array elements
foreach (var element in array)   // iterating array element
{
yield return element.ToString();   // returning elements
}
}
public static void Main(string[]args)         // main method
{
IEnumerable<string> elements = GetArray();  // storing array element
foreach(var element in elements)
{
Console.WriteLine(element);
Console.ReadKey();
}
}
}
}

In diesem Beispiel gibt es ein Array des Elements, das fünf Elemente enthält, und foreach wird für die Iteration jedes Elements verwendet. Die yield-Anweisung wird verwendet, um nach jeder Iteration ein Element zurückzugeben. Die IEnumerable-Schnittstelle speichert jedes Element, während foreach verwendet wird, um die von der Iteration zurückgegebenen Elemente anzuzeigen. Dieser Iterator wird in einer Methode verwendet.

Ausgabe:

Iteratoren in C#

Beispiel #2

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Iterators
{
class Iterator
{
public static IEnumerable<string> GetList()
{
List<string> list = new List<string>();
list.Add("Sunday");     // adding elements to list
list.Add("Monday");
list.Add("Tuesday");
list.Add("Wednesday");
list.Add("Thursday");
list.Add("Friday");
list.Add("Saturday");
foreach(var element in list)        //iteration of list elements
{
yield return element;               //returning elements after iteration
}
}
public static void Main(string[]args)    // main method
{
IEnumerable<string> elements = GetList();          // storing elements
foreach(var element in elements)
{
Console.WriteLine(element);
Console.ReadKey();
}
}
}
}

In diesem Beispiel wird die Listensammlung verwendet und die Methode list.add zum Hinzufügen von Elementen zur Liste verwendet. Hier besteht die Liste aus sieben Elementen. Für die Iteration jedes Elements wird ein foreach verwendet. Die yield-Anweisung wird verwendet, um nach jeder Iteration ein Element zurückzugeben. Die IEnumerable-Schnittstelle speichert jedes Element, während foreach verwendet wird, um die aus der Iteration zurückgegebenen Elemente anzuzeigen.

Ausgabe:

Iteratoren in C#

Beispiel #3

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Iterators
{
class Iterator
{
public static void Main(string[] args)
{
foreach(var item in fib(6))  // iteration of elements
{
Console.WriteLine(item);
}
}
public static IEnumerable<int> fib(int number)
{
int x = 0, y = 1;
// yield return x;
//yield return y;
for (int i=0; i<=number; i++)
{
int temp = x;
x = y;
y = temp + y;
yield return y;        // returning the element
Console.ReadKey();
}
}
}
}

In diesem Beispiel wird die Fibonacci-Reihe generiert und der Iterator in einem Operator verwendet. Die Implementierung davon ist die gleiche wie bei der Verwendung von Iteratoren in einer Methode, außer dass in dieser Operatoren verwendet werden, um Dinge zurückzugeben.

Ausgabe:

Iteratoren in C#

Beispiel #4

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Iterators
{
class Iterator
{
static void Main()
{
List<int> list = new List<int>();
list.Add(10);          // adding elements to list
list.Add(20);
list.Add(30);
list.Add(40);
list.Add(50);
list.Add(60);
list.Add(70);
List<int>.Enumerator a = list.GetEnumerator();
Write(a);
}
static void Write(IEnumerator<int> a)
{
while (a.MoveNext())
{
int value = a.Current;
Console.WriteLine(value);
Console.ReadKey();
}
}
}
}

Im obigen Beispiel wird die Listensammlung verwendet. Die List.add-Methode wird verwendet, um Elemente zur Liste hinzuzufügen. Diese Liste enthält sieben Elemente. MoveNext und Current werden verwendet. MoveNext verfolgt grundsätzlich, ob das nächste Element vorhanden ist oder nicht, und gibt einen booleschen Wert zurück, der wahr sein kann, wenn das Element verfügbar ist, und falsch, wenn kein Element vorhanden ist, während der Strom zum Abrufen des aktuellen Elements verwendet wird.

Ausgabe:

Iteratoren in C#

Vor- und Nachteile von Iterator

Die Vor- und Nachteile werden im Folgenden erläutert

Vorteile

  1. Iteratoren können als Methode und Get-Accessor verwendet werden.
  2. Es kann als Operator oder als Eigenschaft verwendet werden.
  3. Iteratoren sind leicht zu lesen und leicht zu implementieren.
  4. Iteratoren werden mit den generischen und nicht generischen Sammlungen verwendet.

Nachteile

  1. Iteratoren sind beim Zurückverfolgen einer Liste nicht nützlich.
  2. Da der Iterator die Position speichert, können Sie die iterierte Struktur nicht aktualisieren.
  3. Iteratoren werden im statischen Konstruktor, statischen Finalizer und Instanzkonstruktor nicht verwendet.

Fazit

Um die Wertefolge zu durchlaufen, können Iteratoren mit der foreach-Anweisung verwendet werden. Yield kann mit dem Iterator mehrmals verwendet werden, um die Elemente zurückzugeben. Es ist einfach zu implementieren und sehr praktisch.

Das obige ist der detaillierte Inhalt vonIteratoren in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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
Vorheriger Artikel:nhibernate in C#Nächster Artikel:nhibernate in C#