' Collection of code snippets by Arne Vajhøj ' posted to eksperten.dk, usenet and other places (2002-now) Imports System Imports System.Collections Imports System.Collections.Generic Namespace E Public Class ArrayOne(Of T) Implements IEnumerable(Of T) Private a As T() Public Sub New(nelm As Integer) a = New T(nelm - 1) {} End Sub Public Default Property Item(ix As Integer) As T Get Return a(ix - 1) End Get Set a(ix - 1) = value End Set End Property Public ReadOnly Property Length() As Integer Get Return a.Length End Get End Property Public Shared Widening Operator CType(input As ArrayOne(Of T)) As T() Return input.a End Operator Public Function GetEnumerator() As IEnumerator(Of T) Implements IEnumerable(Of T).GetEnumerator Return New ArrayOneEnumerator(Of T)(me) End Function Private Function IEnumerable_GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator Return GetEnumerator() End Function End Class Friend Class ArrayOneEnumerator(Of T) Implements IEnumerator(Of T) Private pos As Integer Private a As ArrayOne(Of T) Public Sub New(a As ArrayOne(Of T)) me.a = a pos = 0 End Sub Public Function MoveNext() As Boolean Implements IEnumerator(Of T).MoveNext pos += 1 Return (pos < a.Length) End Function Public Sub Reset() Implements IEnumerator.Reset pos = 0 End Sub Public ReadOnly Property Current() As T Implements IEnumerator(Of T).Current Get Return a(pos) End Get End Property Private ReadOnly Property IEnumerator_Current() As Object Implements IEnumerator.Current Get Return Current End Get End Property Public Sub Dispose() Implements IDisposable.Dispose ' nothing End Sub End Class Public Class Program Public Shared Sub Test1(a As ArrayOne(Of Integer)) For i As Integer = 1 To a.Length Console.WriteLine(a(i)) Next For Each v As Integer In a Console.WriteLine(v) Next End Sub Public Shared Sub Test2(a As Integer()) For i As Integer = 0 To a.Length - 1 Console.WriteLine(a(i)) Next For Each v As Integer In a Console.WriteLine(v) Next End Sub Public Shared Sub Main(args As String()) Dim a As New ArrayOne(Of Integer)(3) For i As Integer = 1 To a.Length a(i) = i Next For i As Integer = 1 To a.Length Console.WriteLine(a(i)) Next For Each v As Integer In a Console.WriteLine(v) Next Test1(a) Test2(a) End Sub End Class End Namespace