[C#] yield
yield는 반복기 함수(iterator method)에서 컬렉션 데이터를 하나씩 리턴하게 할 때 사용하게 됩니다.
yield에는 두 가지 형태의 yield문을 가지고 있습니다.
yield return <수식(expression)>;
yield break;
yield return을 사용하면 호출할 때마다 순차적으로 따로 반환할 수 있습니다.
yield break을 사용하면 바로 반복기를 종료할 수 있게 됩니다.
반복기 함수는 다음과 같은 형식을 가져야합니다.
- 반환 형식은 IEnumerable, IEnumerable, IEnumerator, 또는 IEnumerator여야 합니다.
- 선언에 ref 또는 out 매개 변수가 허용되지 않습니다.
기본 형식
IEnumerable<변수형> elements = MyIteratorMethod();
foreach (변수형 element in elements)
{
실행문
}
예제
static void Main(string[] args)
{
foreach (int nNum in funsion())
Console.WriteLine(nNum);
}
public static IEnumerable funsion()
{
yield return 1;
yield return 2;
yield return 3;
yield return 4;
}
이렇게 구현하면 순차적으로 값을 리턴합니다.
출력 값
1
2
3
4
static void Main(string[] args)
{
foreach (int nNum in multiplication(2))
Console.WriteLine(nNum);
}
public static IEnumerable multiplication(int nNum)
{
for ( int i = 1; i <= 9; i++ )
yield return nNum * i;
}
반복기 함수에서 for문을 이용해서 리턴할 수 있습니다.
출력 값
2
4
6
8
10
12
14
16
18
static void Main(string[] args)
{
foreach (int nNum in multiplication(2))
Console.WriteLine(nNum);
}
public static IEnumerable multiplication(int nNum)
{
for (int i = 1; i <= 9; i++)
{
if (i == 5) yield break;
yield return nNum * i;
}
}
중간에 yield break를 만나면 종료됩니다.
출력 값
2
4
6
8