お客様から次のようなコードを受け取りました。
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.GetEnumeratorarrayGetEnumerator
public IEnumerator GetEnumerator() { return things.GetEnumerator(); }
コードをそのままにしておく利点はありますか? (私が気付いたもう 1 つのことは、既存のコードを に置き換えることで改善できることIEnumeratorですIEnumerator<Thing>。)