我一直在考虑从客户,看起来像这样的代码:我应该定义自定义的枚举器还是使用内置的枚举器?
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