VB.Net by API/System.Collections/IEnumerable — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Текущая версия на 12:51, 26 мая 2010
IEnumerable.GetEnumerator
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
Implements IEnumerable
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