【问题标题】:Understanding IEnumerator in VB.NET - reset了解 VB.NET 中的 IEnumerator - 重置
【发布时间】:2014-01-08 09:37:46
【问题描述】:

在我的情况下,我无法理解 vb.net 中的 IEnumerator 没有发生什么。

我有这段代码,它从数据库中提取数据,然后读取前两行,将每一行中的一列汇总为“numGirls”。然后,使用“resEnum1.Reset()”,我希望“resEnum”将自己重置为集合的开头,但事实并非如此;

Dim resEnum1 As IEnumerator = iTrack.res_by_gender(False, YearCB.Text).GetEnumerator  
resEnum1.Reset()   
Dim resSet As Object  
Dim numGirls As Integer = 0  
For x = 0 To 1  
  resEnum1.MoveNext()  
  resSet = resEnum1.Current  
  numGirls += resSet.qty  
 Next  
 resEnum1.Reset()

此时,我的代码应该继续并从集合开始 (-1) 开始使用 MoveNext 遍历集合;

While resEnum1.MoveNext  
'...........'
End While  

但是,IEnumerator (resEnum1) 实际上并未重置,而是从集合的第三行继续。为什么?
显然我不了解某些东西,除非由我来重新发明轮子并在代码中实现“重置”?

【问题讨论】:

  • 也许返回的枚举数是“只进的”?你知道res_by_gender的DataType吗?
  • 噢!你是对的,至少我认为你是对的。类型是 ISingleResult,据我所知,这确实是只用于战争的。非常感谢您的产品。
  • 我已经发布了一个答案,因为其他人可能会遇到同样的问题。

标签: vb.net reset ienumerator


【解决方案1】:

并非所有枚举器都实现从IEnumerator 继承的Reset 方法。您可以将其视为“只进”枚举器。

“Reset 方法是为实现 COM 互操作性而提供的。它不一定需要实现;相反,实现者可以简单地抛出 NotSupportedException。”。 - MSDN

【讨论】:

  • 谢谢。完全正确。我没有完全理解文档。
猜你喜欢
  • 2020-04-15
  • 2013-07-06
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
相关资源
最近更新 更多