单个C#类的多个枚举器

时间:2013-07-20 07:20:36

标签: c# foreach intervals ienumerator

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

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

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

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

1 个答案:

答案 0 :(得分:11)

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

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

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