909
#7. yield return
8 IEnumerable 이스 , foreach 니다. C# .NET은 IEnumerable
러분 드는 용한 . Sport 서대
만들 .
enum Sport
{
Football, Baseball,
Basketball, Hockey,
Boxing, Rugby, Fencing,
}
IEnumerable를 , Current MoveNext() .
class SportCollection : IEnumerable<Sport> {
public IEnumerator<Sport> GetEnumerator() {
return new ManualSportEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
return GetEnumerator();
}
class ManualSportEnumerator : IEnumerator<Sport> {
int current = -1;
public Sport Current { get { return (Sport)current; } }
public void Dispose() { return; } // 처분할없음
object System.Collections.IEnumerator.Current { get { return Current; } }
public bool MoveNext() {
int maxEnumValue = Enum.GetValues(typeof(Sport)).Length - 1;
if ((int)current >= maxEnumValue)
return false;
current++;
return true;
}
public void Reset() { current = 0; }
}
}
ManualSportCollection foreah 군요. 있습(, ,
, , , ).
Console.WriteLine("SportCollection contents:");
SportCollection sportCollection = new SportCollection();
foreach (Sport sport in sportCollection)
Console.WriteLine(sport.ToString());
. , 어떤 반환
. , C# 공하 . 이지 yield return
.
MoveNext() current
.
IEnumerator<Sport>
. foreach
Current MoveNext()
.
IEnumerable GetEnumerator()
,
.
15
, , ICollection<T>
, .
, .
910 Appendix i
yield return --원(all-in-one) . SportCollection
, 드가 있습.
class SportCollection : IEnumerable<Sport> {
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
return GetEnumerator();
}
public IEnumerator<Sport> GetEnumerator() {
int maxEnumValue = Enum.GetValues(typeof(Sport)).Length;
for (int i = 0; i <= maxEnumValue; i++) {
yield return (Sport)i;
}
}
}
지만, 일어 . IEnumerator
IEnumerator<T> yield return문 드를
자동MoveNext()와 Current()서드가 추가
. , yield return foreach문에 . foreach (MoveNext()
), 컴파 지막 yield return
바로 다음
. 열거 되면, Mov-
eNext() false . , (F11)
. 이해 , 4 해서 NameEnumerator() 단한
.
static IEnumerable<string> NameEnumerator() {
yield return "Bob"; // 문장 수행이 메서드는 빠져나오고,
yield return "Harry"; // 음 번에는 여기에서 다시 시작합니다.
yield return "Joe";
yield return "Frank";
}
foreach문이 . 단계 (F11) 일이 .
IEnumerable<string> names = NameEnumerator(); // 곳에 중단점을 설정합니
foreach (string name in names)
Console.WriteLine(name);
있는 있는,
인덱(indexer)
. 리(myList[3]
myDictionary[Steve]와 은) 하기 [] , 합니. 제로
. 성과 .
IDE .
Indexer
, IDE
.
public Sport this[int index] {
get { return (Sport)index; }
}
3 enum Hockey .
, SportCollection
. ICollection<Sport>
.

Get Head First C# (개정3판): 상상을 초월하는 객체지향 C# 학습법 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.