Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单个C#类的多个枚举数_C#_Foreach_Intervals_Ienumerator - Fatal编程技术网

单个C#类的多个枚举数

单个C#类的多个枚举数,c#,foreach,intervals,ienumerator,C#,Foreach,Intervals,Ienumerator,我创建了一个由区间组成的数据结构。数据结构自然应该有一个枚举所有间隔的枚举器,但我想公开两个不同的枚举器,它们以不同的顺序枚举间隔 其中一个枚举器枚举间隔非常快,但顺序有些随意。另一个按字典顺序枚举,但速度稍慢(但取决于时间间隔)。根据您试图实现的目标,一个枚举器可能会优先于另一个 例如,有没有一种方法允许用户决定在foreach循环中应该使用哪个枚举数?如果没有,我可以很容易地使用一个属性在枚举数之间切换,或者构造函数可以使用一个附加参数。但我有点担心这会带来更多的混乱而不是方便 对于另一个枚

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

其中一个枚举器枚举间隔非常快,但顺序有些随意。另一个按字典顺序枚举,但速度稍慢(但取决于时间间隔)。根据您试图实现的目标,一个枚举器可能会优先于另一个

例如,有没有一种方法允许用户决定在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方法。