Yield는 C#의 상황별 키워드입니다. 상황별 키워드는 전체 프로그램용으로 예약되지 않은 C#의 키워드입니다. 오히려 키워드를 적절하게 사용할 수 있는 프로그램의 특정 부분에 대해 예약된 키워드입니다. 이러한 키워드는 관련성이 컴파일러에 특별한 의미를 전달하지 않는 경우 유효한 식별자로 사용될 수 있습니다.
yield 키워드는 해당 키워드를 포함하는 메서드 또는 접근자가 반복자 메서드/접속자임을 나타냅니다. 반복자 메서드/접근자는 단일 값을 반환하지 않는 메서드/접근자입니다. 오히려 반복적으로 호출되며 각 반복마다 다른 값을 반환합니다.
구문
yield 키워드의 구문은 매우 간단합니다. 메소드나 접근자의 return 문 앞에 키워드를 지정하기만 하면 됩니다.
yield return <expression>;
또는
yield break;
이것은 키워드의 두 가지 구현입니다. return 문과 함께 사용하면 항복 키워드는 표현식의 종료 조건이 충족될 때까지 표현식에서 계산된 다음 값을 반환합니다. break 키워드와 함께 사용하면 Yield 키워드가 반복을 중단하고 프로그램 실행이 메서드/접속자에서 나옵니다.
몇 가지 예를 살펴보겠습니다.
아래 예에서는 Yield 키워드를 사용하여 피보나치 수열을 생성합니다.
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; } } }
다음 예에서는 get 접근자와 함께 Yield 키워드를 사용합니다.
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; } } }
다음 예에서는 항복 break 문의 사용을 보여줍니다. 시리즈의 숫자가 발견되거나 최대 검색 제한에 도달하면 반복이 종료됩니다.
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; } } }
elementToFind 1234를 변경하면 출력은 다음과 같습니다.
1) 각 요소는 항복 반환 문을 사용하여 한 번에 하나씩 반환되어야 합니다.
2) 반환 유형은 IEnumerable 또는 IEnumerator여야 합니다.
3) Yield에는 in, ref, out 키워드를 사용할 수 없습니다.
4) Yield 키워드는 람다 표현식이나 익명 메소드와 함께 사용할 수 없습니다.
5) Yield return 문은 try-catch 블록 안에 있을 수 없습니다. try-finally 블록 안에 있을 수 있습니다.
6) Yield Break 문은 try-finally 블록 안에 있을 수 없습니다. try-catch 블록 내부에 있을 수 있습니다.
yield 키워드를 사용하면 임시 컬렉션을 만들 필요가 없습니다. 메서드에서 데이터가 반환되기 전에 데이터를 저장하기 위해 임시 컬렉션을 만들 필요가 없습니다. 또한 메소드의 실행 상태가 유지되므로 코드에 명시적으로 저장할 필요가 없습니다.
우리는 이 기사를 통해 키워드 산출 방법이 C#에서 매우 유용한 키워드라는 것을 배웠습니다. 가능한 한 적은 줄로 복잡한 문제를 코딩하는 데 도움이 되며 코드를 이해하기 쉽게 만듭니다. 이것은 C# 여정에 대한 고급 수준의 기사였습니다. 실습을 위해 코드에 키워드를 사용해 보는 것이 좋습니다.
위 내용은 C#의 수익률 키워드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!