2013-12-19 55 views
1

我無法理解什麼是沒有發生,在我的情況下,與IEnumerator在VB.NET中。在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)不INFACT得到復位,而是從集合的第三行繼續。爲什麼?
很顯然,我並沒有理解一些東西,除非我重新發明輪子並在代碼中實現「重置」?

+1

也許返回的枚舉器是「只向前」?你知道'res_by_gender'的DataType嗎? –

+0

Doh!你是對的,至少我認爲你是。這種類型是ISingleResult,據我所知,它確實是僅限於戰爭。非常感謝你的產品。 – user3115420

+0

我已經發布了一個答案,因爲其他人可能會遇到同樣的問題。 –

回答

0

並非所有的普查員都實施從IEnumerator繼承的Reset方法。你可以把它看作是一個「只向前」的普查員。

「Reset方法提供了COM互操作性,它不一定需要實現;相反,實現者可以簡單地引發NotSupportedException。」。 - MSDN

+0

謝謝。完全正確。我還沒有完全理解文檔。 – user3115420