728x90
반응형
yield
Iterator는 yield라는 keyword를 사용한다. yield는 colleciton, array를 순회하며 호출한 함수에 element를 하나씩 반환한다.
yield break를 사용하여 반복기를 종료할 수 있다.
public static IEnumerable<int> Fibonacci(int length)
{
int a = 0, b = 1;
for (int i = 0; i < length; i++)
{
yield return a; //이 시점의 a가 반환된다.
int c = a + b;
a = b;
b = c;
}
}
static void Main(string[] args)
{
// Display the Fibonacci sequence up to the tenth number.
foreach (int i in Fibonacci(10))
{
Console.Write(i + " ");
}
}
// output
// 0, 1, 1, 2, 3, 5, 8, 13, 21, 34
yield return 문구는 동일한 code block에서 여러번 사용할 수 있다.
public static IEnumerable<int> SomeNumbers()
{
yield return 1;
yield return 2;
yield return 7;
yield return 8;
yield return 5;
}
var someNumbers = SomeNumbers();
string allNumbers = "";
foreach(int number in someNumbers)
{
allNumbers += " " + number.ToString();
}
Console.WriteLine(allNumbers.Trim());
Console.WriteLine("Average: " + someNumbers.Average());
Iterator
Custom Collection Class
static void Main()
{
DaysOfTheWeek days = new DaysOfTheWeek();
foreach (string day in days)
{
Console.Write(day + " ");
}
// Output: Sun Mon Tue Wed Thu Fri Sat
Console.ReadKey();
}
public class DaysOfTheWeek : IEnumerable
{
private string[] days = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
// IEnumerable 인터페이스 구현
public IEnumerator GetEnumerator()
{
for (int index = 0; index < days.Length; index++)
{
// Yield each day of the week.
yield return days[index];
}
}
}
728x90
반응형
'C#' 카테고리의 다른 글
C#] Inheritance, Polymorphism, Abstraction, Interface (0) | 2022.07.21 |
---|---|
C#] LINQ - Projection (0) | 2022.07.20 |
C#] Delegates, Anonymous Methods and Lambda Expressions (0) | 2022.07.18 |
C#] DynamicObject Class VS ExpandoObject Class (0) | 2022.07.07 |
C#] Expression trees 설명, Delegate와 차이점 (0) | 2022.07.06 |
댓글