单个C#类的多个枚举器

Mik*_*und 5 c# ienumerator foreach intervals

我创建了一个由间隔组成的数据结构.数据结构自然应该有一个枚举所有间隔的枚举器,但我想暴露两个不同的枚举器,它们按不同的顺序枚举间隔.

其中一个枚举器非常快地枚举间隔,但是有些任意顺序.另一个按字典顺序列举它们,但有点慢(取决于间隔).根据您尝试实现的目标,一个普查员可能更喜欢另一个.

有没有办法允许用户决定应该在foreach循环中使用哪个枚举器?如果没有,我可以很容易地拥有一个用于在枚举器之间切换的属性,或者构造函数可以采用一个额外的参数.但我有点害怕它会导致更多的混乱而不是方便.

我是否应该为另一个枚举器创建一个返回IEnumerator的单独方法?这个奇怪的问题是否有最佳实践?

Ste*_*ove 11

公开两个返回不同枚举数的属性可能是正确的方法.而不是你的数据结构实现IEnumerable自己(我猜这个),创建两个不同的IEnumerator实现,并从主类中为每一个实现暴露.然后使用代码很简单:

foreach( var item in data.FastEnumerator )
{
    ....

foreach( var item in data.LexicalEnumerator )
{
    ....
Run Code Online (Sandbox Code Playgroud)

  • 您不能在 IEnumerator 上使用 foreach,因为它仅需要 IEnumerable 来实现预期的 GetEnumerator 方法。 (2认同)