VB.Net by API/System.Collections/IEnumerable

Материал из VB Эксперт
Перейти к: навигация, поиск

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>