只有一次枚举的正确接口(即“流”)

时间:2018-03-09 00:54:58

标签: c# .net ienumerable ienumerator

我有像数据结构一样的流,可以枚举一次。

目前,我有一个函数返回一个内部包含此结构的IEnumerator。当然,这个调查员不能是reset()

这种方法意味着客户端不能尝试对流进行两次枚举,因为它们无法访问底层结构,只能访问不可重置的枚举器。

但是,我注意到foreach语句需要IEnumerable实现。

我犹豫了一个提供IEnumerable接口的实现,因为IEnumerable的契约中隐含的似乎应该能够多次枚举IEnumerable,但是我的结构不允许这样做。基本上我的结构只能有一个枚举器。

我甚至给了我的枚举器一个私有拷贝构造函数来确保这一点。

但由于使用IEnumerator而不是IEnumerable,我似乎失去了foreach语法。

我正在做最好的方法,还是我完全使用错误的抽象?是否有一个“流”接口,更好地包装我想要实现的目标?我注意到有“Stream”数据类型,但它们处理字节。我需要将我的流设置为“T”参数。

我的项目很遗憾地编写了Windows XP文件夹,所以我更喜欢与.NET 2.0兼容的答案,但如果不可能,那么与以后的.NET版本相关的答案是可以的,至少它可能提供一些灵感并且有用对于这个问题的未来读者。

1 个答案:

答案 0 :(得分:1)

https://msdn.microsoft.com/en-us/library/system.collections.ienumerator.reset(v=vs.110).aspx

  

为COM互操作性提供了Reset方法。它不一定需要实施;相反,实现者可以简单地抛出NotSupportedException。