集合实现了两个接口:IEnumerator和Ienumerable接口。
IEnumerator 接口
https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.ienumerator?view=netcore-3.1
支持对非泛型集合的简单迭代。
属性
Current | 获取集合中位于枚举数当前位置的元素。 |
方法
MoveNext() | 将枚举器前移到集合的下一个元素。 |
Reset() | 将枚举器设置为其初始位置(在集合中第一个元素之前)。 |
IEnumerable 接口
https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.ienumerable?view=netcore-3.1
公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。
方法
GetEnumerator() | 返回循环访问集合的枚举器。 |
Imports System
Imports System.Collections
'实现一个枚举器访问集合的元素
'类
Public Class Customer
Public strName As String
Public Sub New(ByVal name As String)
Me.strName = name
End Sub
End Class
类数组
Public Class Customers
Implements IEnumerable
Private _Customers() As Customer
Public Sub New(ByVal array() As Customer)
_Customers = New Customer(array.Length - 1) {}
For i As Integer = 0 To array.Length - 1
_Customers(i) = array(i)
Next
End Sub
'实现IEnumerable的方法,返回枚举数
Public Function GetEnumerator() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator
Return New CustomerEnum(_Customers)
End Function
End Class
'枚举器
Public Class CustomerEnum
Implements IEnumerator
Public _Customers() As Customer
Dim position As Integer = -1
Public Sub New(ByVal list() As Customer)
_Customers = list
End Sub
'实现IEnumerator的方法1
Public ReadOnly Property Current As Object Implements System.Collections.IEnumerator.Current
Get
Try
Return _Customers(position)
Catch ex As Exception
Throw New InvalidOperationException
End Try
End Get
End Property
'实现IEnumerator的方法2
Public Function MoveNext() As Boolean Implements System.Collections.IEnumerator.MoveNext
position = position + 1
Return position < _Customers.Length
End Function
'实现IEnumerator的方法3
Public Sub Reset() Implements System.Collections.IEnumerator.Reset
position = -1
End Sub
End Class
Module Module1
Sub Main()
Dim CustomerArray() As Customer = {New Customer("李雷"), _
New Customer("韩梅梅"), _
New Customer("王芳")}
Dim CustomerList As New Customers(CustomerArray)
Dim cus As Customer
For Each cus In CustomerList
Console.WriteLine(cus.strName)
Next
Console.Read()
End Sub
End Module