Maison > Article > développement back-end > Mot-clé de rendement en C#
Yield est un mot-clé contextuel en C#. Les mots-clés contextuels sont les mots-clés en C# qui ne sont pas réservés au programme complet. Il s’agit plutôt de mots-clés réservés à certaines parties du programme où le mot-clé peut être utilisé de manière pertinente. Ces mots-clés peuvent être utilisés comme identifiants valides partout où leur pertinence n'apporte aucune signification particulière au compilateur.
Le mot-clé rendement indique que la méthode ou l'accesseur contenant le mot-clé est une méthode/accesseur itérateur. Une méthode/accesseur itérateur est une méthode qui ne renvoie pas une seule valeur. Au lieu de cela, il est appelé par itérations et renvoie des valeurs différentes à chaque itération.
Syntaxe
La syntaxe du mot-clé rendement est assez simple. Il vous suffit de spécifier le mot-clé avant l'instruction return de la méthode ou de l'accesseur.
yield return <expression>;
OU
yield break;
Ce sont les deux implémentations du mot-clé. Lorsqu'il est utilisé avec une instruction return, le mot-clé rendement renvoie la valeur suivante calculée à partir de l'expression, jusqu'à ce que la condition de sortie de l'expression soit remplie. Lorsqu'il est utilisé avec le mot-clé break, le mot-clé rendement interrompt l'itération et l'exécution du programme sort de la méthode/accesseur.
Considérons quelques exemples :
L'exemple ci-dessous génère la série de Fibonacci à l'aide du mot-clé rendement.
using System; using System.Collections.Generic; public class Program { public static void Main() { foreach (int ele in GetFibonacciSeries(10)) { Console.Write(ele + "\t"); } } public static IEnumerable<int> GetFibonacciSeries(int x) { for (int a = 0, b = 0, c = 1; a < x; a++) { yield return b; int temp = b + c; b = c; c = temp; } } }
L'exemple suivant utilise le mot-clé rendement avec un accesseur get.
using System; using System.Collections.Generic; public class Program { public static void Main() { foreach (Day day in new Days().DaysOfWeek) { Console.WriteLine("Day {0} of the week is {1}", day.DayOfWeek, day.DayName); } } public static IEnumerable<int> Show(int x) { for (int a = 0, b = 0, c = 1; a < x; a++) { yield return b; int temp = b + c; b = c; c = temp; } } public class Days { public IEnumerable<Day> DaysOfWeek { get { yield return new Day{DayName = "Sunday", DayOfWeek = 1}; yield return new Day{DayName = "Monday", DayOfWeek = 2}; yield return new Day{DayName = "Tuesday", DayOfWeek = 3}; yield return new Day{DayName = "Wednesday", DayOfWeek = 4}; yield return new Day{DayName = "Thursday", DayOfWeek = 5}; yield return new Day{DayName = "Friday", DayOfWeek = 6}; yield return new Day{DayName = "Saturday", DayOfWeek = 7}; } } } public class Day { public string DayName { get; set; } public int DayOfWeek { get; set; } } }
L'exemple suivant démontre l'utilisation de l'instruction Yield Break. L'itération se termine dès qu'un numéro dans la série est trouvé ou que la limite maximale de recherche est atteinte.
using System; using System.Collections.Generic; public class Program { public static void Main() { int elementToFind = 21; int maxElements = 100; foreach (int ele in FindFibonacciNumber(elementToFind, maxElements)) { Console.Write("Found the number " + elementToFind + " in Fibonacci series."); } } public static IEnumerable<int> FindFibonacciNumber(int n, int max) { for (int a = 0, b = 0, c = 1; true; a++) { if (a > max) { Console.Write("Searched first " + max + " Fibonacci numbers. Element " + n + " not found"); yield break; } if (b == n) { yield return b; yield break; } int temp = b + c; b = c; c = temp; } } }
Si nous modifions elementToFind 1234, le résultat sera –
1) Chaque élément doit être renvoyé un par un à l'aide de l'instruction Yield Return.
2) Le type de retour doit être un IEnumerable ou un IEnumerator.
3) Vous ne pouvez pas l'utiliser dans, ref ou out des mots-clés avec rendement.
4) Le mot-clé Yield ne peut pas être utilisé avec des expressions Lambda ou des méthodes anonymes.
5) Une instruction rendement-retour ne peut pas se trouver dans un bloc try-catch. Il peut être à l'intérieur d'un bloc try-finally.
6) Une instruction Yield Break ne peut pas se trouver à l’intérieur d’un bloc try-finally. Il peut être à l'intérieur d'un bloc try-catch.
Le mot-clé rendement évite d'avoir à créer des collections temporaires. Vous n'avez pas besoin de créer des collections temporaires pour stocker les données avant qu'elles ne soient renvoyées par la méthode. De plus, l'état d'exécution de la méthode est conservé et n'a donc pas besoin d'être explicitement stocké dans le code.
Nous avons appris de cet article que comment générer un mot-clé est un mot-clé très utile en C#. Il permet de coder des problèmes complexes avec le moins de lignes possible et rend également le code facile à comprendre. Il s'agissait d'un article de niveau avancé sur le parcours C#. Il est recommandé d'essayer d'utiliser le mot-clé dans votre code afin d'avoir une pratique pratique.
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!