我有像数据结构一样的流,可以枚举一次。
目前,我有一个函数返回一个内部包含此结构的IEnumerator
。当然,这个调查员不能是reset()
。
这种方法意味着客户端不能尝试对流进行两次枚举,因为它们无法访问底层结构,只能访问不可重置的枚举器。
但是,我注意到foreach
语句需要IEnumerable
实现。
我犹豫了一个提供IEnumerable
接口的实现,因为IEnumerable
的契约中隐含的似乎应该能够多次枚举IEnumerable
,但是我的结构不允许这样做。基本上我的结构只能有一个枚举器。
我甚至给了我的枚举器一个私有拷贝构造函数来确保这一点。
但由于使用IEnumerator
而不是IEnumerable
,我似乎失去了foreach
语法。
我正在做最好的方法,还是我完全使用错误的抽象?是否有一个“流”接口,更好地包装我想要实现的目标?我注意到有“Stream”数据类型,但它们处理字节。我需要将我的流设置为“T”参数。
我的项目很遗憾地编写了Windows XP文件夹,所以我更喜欢与.NET 2.0兼容的答案,但如果不可能,那么与以后的.NET版本相关的答案是可以的,至少它可能提供一些灵感并且有用对于这个问题的未来读者。
答案 0 :(得分:1)
https://msdn.microsoft.com/en-us/library/system.collections.ienumerator.reset(v=vs.110).aspx
为COM互操作性提供了Reset方法。它不一定需要实施;相反,实现者可以简单地抛出NotSupportedException。