VB.Net/Data Structure/IEnumerable
IEnumerable: array like access
Imports System
Imports System.Collections
Public Class MainClass
Shared Sub Main(ByVal args As String())
" create a new list box and initialize
Dim currentListBox As New EnumerableClass("A", "B")
" add a few strings
currentListBox.Add("C")
currentListBox.Add("D")
currentListBox.Add("E")
currentListBox.Add("F")
" test the access
Dim subst As String = "Z"
currentListBox(1) = subst
" access all the strings
Dim s As String
For Each s In currentListBox
Console.WriteLine("Value: {0}", s)
Next
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
Implements IEnumerable
Imports System
Imports System.Collections
Public Class MainClass
Shared Sub Main()
Dim currentListBox As New _
ListBoxTest("Hello", "World")
"add a few strings
currentListBox.Add("o")
currentListBox.Add("s")
currentListBox.Add("n")
currentListBox.Add("t")
"test the access
Dim subst As String = "Universe"
currentListBox(1) = subst
"access all the strings
Dim s As String
For Each s In currentListBox
Console.WriteLine("Value: {0}", s)
Next
End Sub
End Class
Public Class ListBoxTest : Implements IEnumerable
Private strings( ) As String
Private ctr As Integer = 0
Private Class ListBoxEnumerator
Implements IEnumerator
Private currentListBox As ListBoxTest
Private index As Integer
Public Sub New(ByVal currentListBox As ListBoxTest)
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
Public Function GetEnumerator( ) As IEnumerator _
Implements IEnumerable.GetEnumerator
Return New ListBoxEnumerator(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