VB.Net by API/System.Collections/IEnumerable
IEnumerable.GetEnumerator
<source lang="vbnet"> Imports System Imports System.Collections Public Class MainClass
Shared Sub Main() Dim intQueue As New Queue( ) Dim i As Integer For i = 0 To 4 intQueue.Enqueue((i * 5)) Next i Console.WriteLine("intQueue values:") DisplayValues(intQueue) Console.WriteLine("(Dequeue) {0}", intQueue.Dequeue( )) Console.WriteLine("intQueue values:") DisplayValues(intQueue) Console.WriteLine("(Dequeue) {0}", intQueue.Dequeue( )) Console.WriteLine("intQueue values:") DisplayValues(intQueue) Console.WriteLine("(Peek) {0}", intQueue.Peek( )) Console.WriteLine("intQueue values:") DisplayValues(intQueue) End Sub Public Shared Sub DisplayValues(ByVal myCollection As IEnumerable) Dim myEnumerator As IEnumerator = myCollection.GetEnumerator( ) While myEnumerator.MoveNext( ) Console.WriteLine("{0} ", myEnumerator.Current) End While Console.WriteLine( ) End Sub
End Class
</source>
Implements IEnumerable
<source lang="vbnet"> Imports System Imports System.Collections
Public Class MainClass
Shared Sub Main(ByVal args As String()) Dim intCollection As New Collection( ) Dim empCollection As New Collection( ) Dim empCollection2 As New Collection( ) " populate the Collections Dim i As Integer For i = 0 To 4 empCollection.Add(New EnumerableClass("A", "B")) intCollection.Add((i * 5)) Next i " add key/value pairs empCollection2.Add(New EnumerableClass("A", "B"), "A B") empCollection2.Add(New EnumerableClass("C", "D"), "C D") empCollection2.Add(New EnumerableClass("E", "F"), "E F") " print each member of the array For Each i In intCollection Console.Write("{0} ", i.ToString( )) Next i Console.WriteLine( ) Console.WriteLine("Employee collection...") Dim e As EnumerableClass For Each e In empCollection Console.Write("{0} ", e.ToString( )) Next e Console.WriteLine( ) Console.WriteLine("Employee collection 2...") For Each e In empCollection2 Console.Write("{0} ", e.ToString( )) Next e Console.WriteLine( ) " retrieve an Employee by key Dim emp As EnumerableClass emp = empCollection2.Item("A B") Console.WriteLine( _ " empID {0}", emp.ToString( )) " note that indexing is 1-based (rather than zero based) emp = empCollection2.Item(1) Console.WriteLine( _ "Index(1) retrieved empID {0}", emp.ToString( )) End Sub
End Class
Public Class EnumerableClass : Implements IEnumerable Private strings( ) As String Private ctr As Integer = 0 Private Class MyEnumerator Implements IEnumerator Private currentListBox As EnumerableClass Private index As Integer Public Sub New(ByVal currentListBox As EnumerableClass) Me.currentListBox = currentListBox index = -1 End Sub Public Function MoveNext( ) As Boolean _ Implements IEnumerator.MoveNext index += 1 If index >= currentListBox.strings.Length Then Return False Else Return True End If End Function Public Sub Reset( ) _ Implements IEnumerator.Reset index = -1 End Sub Public ReadOnly Property Current( ) As Object _ Implements IEnumerator.Current Get Return currentListBox(index) End Get End Property End Class " end nested class Public Function GetEnumerator( ) As IEnumerator _ Implements IEnumerable.GetEnumerator Return New MyEnumerator(Me) End Function Public Sub New( _ ByVal ParamArray initialStrings( ) As String) ReDim strings(7) Dim s As String For Each s In initialStrings strings(ctr) = s ctr += 1 Next End Sub Public Sub Add(ByVal theString As String) strings(ctr) = theString ctr += 1 End Sub Default Public Property Item( _ ByVal index As Integer) As String Get If index < 0 Or index >= strings.Length Then " handle bad index Exit Property End If Return strings(index) End Get Set(ByVal Value As String) strings(index) = Value End Set End Property Public Function GetNumEntries( ) As Integer Return ctr End Function End Class </source>