8

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

枚举器之一非常快速地枚举间隔,但顺序有些随意。另一个按字典顺序枚举它们,但速度稍慢(尽管取决于间隔)。根据您尝试实现的目标,一个枚举器可能比另一个更喜欢。

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

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

4

1 回答 1

14

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

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

foreach( var item in data.LexicalEnumerator )
{
    ....
于 2013-07-20T07:31:08.433 回答