我一直在考慮從客戶,看起來像這樣的代碼:我應該定義自定義的枚舉器還是使用內置的枚舉器?
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)yield return t; } 爲了迭代你的類,使用Things things = new Things(); foreach(var t in things){...} –
graumanoz
2013-05-13 10:28:28
@graumanoz考慮到這一點,這可能是客戶長時間敲響的_old_代碼,如果他們從頭開始寫類似的話,他們會使用更現代的方法。 – TooTone 2013-05-13 10:41:10
TooTone 是的,這是一箇舊的代碼:) 它可以完全取代我以前寫的小方法,順便說一句,現代的方法。 – graumanoz 2013-05-13 10:52:09