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); }
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); }
2. déclaration de rendement
Deux formes de déclaration de rendement :
yield return <expression>;yield break;
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
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 ""; }
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"; } } }
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]; } } } }
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!