나는 다음과 같다 고객에서 몇 가지 코드를 부여했습니다 :사용자 지정 열거자를 정의하거나 기본 제공 열거자를 사용해야합니까?
public class Thing
{
// custom functionality for Thing...
}
public class Things : IEnumerable
{
Thing[] things;
internal int Count { get { return things.Length; } }
public Thing this[int i] { get { return this.things[i]; } }
public IEnumerator GetEnumerator() { return new ThingEnumerator(this); }
// custom functionality for Things...
}
public class ThingEnumerator : IEnumerator
{
int i;
readonly int count;
Things container;
public ThingEnumerator(Things container)
{
i = -1;
count = container.Count;
this.container = container;
}
public object Current { get { return this.container[i]; } }
public bool MoveNext() { return ++i < count; }
public void Reset() { i = -1; }
}
내가 궁금하면이 ThingEnumerator
클래스를 제거 찍었을 위해 더 좋을와 함께 Things.GetEnumerator
전화를 교체 한 것인지 여부입니다 단순히 array
의 GetEnumerator
에 위임 한 구현입니까? 좋아요 :
public IEnumerator GetEnumerator() { return things.GetEnumerator(); }
코드를 그대로 유지하면 어떤 장점이 있습니까? (내가 발견 한 또 다른 것은 기존의 코드가 IEnumerator<Thing>
으로 IEnumerator
를 교체하여 개선 될 수 있다는 것입니다.) 제네릭
직감이 맞습니다. Generics가 C#을 사용하기 전에이 코드는 오래되었습니다. GetEnumerator를 으로 바꿀 수 있습니다. public IEnumerable GoForward() {foreach (var t in things)는 return t를 반환합니다. } 그리고 클래스를 반복하려면 Things things = new Things(); foreach (var t in things) {...} –
graumanoz
@graumanoz 생각해 보면, 고객이 오랫동안 두드렸던 코드 일 가능성이 높습니다. 그리고 비슷한 방식으로 쓴다면 더 현대적인 접근 방식을 사용하게 될 것입니다. – TooTone
TooTone 예, 이것은 오래된 코드입니다. 이전에 작성한 작은 방법으로 완전히 대체 할 수 있습니다. – graumanoz