선생님 안녕하세요!
아래 예제는 제가 작성한 코드입니다.
class Program
{
static IEnumerable<int> GetScores()
{
int[] scores = new int[] { 10, 20, 30 };
yield return scores[0];
yield return scores[1];
yield return scores[2];
}
static void Main(string[] args)
{
// ★ CASE Ⅰ ★
foreach (int score in GetScores())
{
Console.WriteLine(score);
}
// ★ CASE Ⅱ ★
IEnumerator<int> ienumerator = GetScores().GetEnumerator();
while (ienumerator.MoveNext())
{
Console.WriteLine(ienumerator.Current.ToString());
}
}
}
https://www.sysnet.pe.kr/2/0/11887 게시글에 보면
반환 타입은 반드시 IEnumerable, IEnumerable<T>, IEnumerator, IEnumerator<T> 중의 하나여야 한다고 하셨는데
교재도 그렇고 다른 예제를 참고해봐도 IEnumerable<T> 밖에 사용하지 않더라구요...
그래서 GetScores() 함수의 반환 타입을 IEnumerator<T>로 바꾸니까 컴파일 오류가 발생했습니다.
질문 1) yield는 IEnumerator<T>와 같이 사용한다고 받아들이는 것이 좋을까요?
질문 2)
CASE Ⅰ과 CASE Ⅱ가 동일한 결과를 출력하는 것으로 추론해보았습니다.
scores[0]이 IEnumerable<int>로 형변환이 되어 foreach로 넘겨진다고 생각해도 될까요?
[최초 등록일: ]
[최종 수정일: 2/8/2021]