单个C#类的多个枚举数
我创建了一个由区间组成的数据结构。数据结构自然应该有一个枚举所有间隔的枚举器,但我想公开两个不同的枚举器,它们以不同的顺序枚举间隔 其中一个枚举器枚举间隔非常快,但顺序有些随意。另一个按字典顺序枚举,但速度稍慢(但取决于时间间隔)。根据您试图实现的目标,一个枚举器可能会优先于另一个 例如,有没有一种方法允许用户决定在foreach循环中应该使用哪个枚举数?如果没有,我可以很容易地使用一个属性在枚举数之间切换,或者构造函数可以使用一个附加参数。但我有点担心这会带来更多的混乱而不是方便单个C#类的多个枚举数,c#,foreach,intervals,ienumerator,C#,Foreach,Intervals,Ienumerator,我创建了一个由区间组成的数据结构。数据结构自然应该有一个枚举所有间隔的枚举器,但我想公开两个不同的枚举器,它们以不同的顺序枚举间隔 其中一个枚举器枚举间隔非常快,但顺序有些随意。另一个按字典顺序枚举,但速度稍慢(但取决于时间间隔)。根据您试图实现的目标,一个枚举器可能会优先于另一个 例如,有没有一种方法允许用户决定在foreach循环中应该使用哪个枚举数?如果没有,我可以很容易地使用一个属性在枚举数之间切换,或者构造函数可以使用一个附加参数。但我有点担心这会带来更多的混乱而不是方便 对于另一个枚
对于另一个枚举器,我应该创建一个单独的方法来返回IEnumerator吗?对于这个奇怪的小问题,有没有最佳做法?公开两个返回不同枚举数的属性可能是正确的方法。与实现
IEnumerable
本身的数据结构不同(我猜是这样),创建两个不同的IEnumerator
实现,并从主类中为每个实现公开一个属性。那么使用代码就很简单了:
foreach( var item in data.FastEnumerator )
{
....
foreach( var item in data.LexicalEnumerator )
{
....
好主意!非常喜欢:)由于数据结构是C5通用集合库的一部分,它必须实现IEnumerable。我已将该集合的普通枚举器设置为快速、“未排序”版本。排序版本通过GetEnumeratorSorted方法和sorted属性公开,因此可以在类似“foreach(collection.sorted中的var interval){}”的循环中枚举集合。工作起来就像一个符咒:DYou不能在IEnumerator上使用foreach,因为它只需要IEnumerable作为预期的GetEnumerator方法。