Language Basics VB.Net

Imports System
Imports System.Data
Imports System.Collections
Imports System.Windows.Forms
Public Class MainClass
    Shared Sub Main()
        Dim customers As CustomerCollection = New CustomerCollection()
        customers.Clear()
        
        Dim newCustomer As Customer
        newCustomer.FirstName = "firstName"
        newCustomer.LastName = "lastName"
        newCustomer.Email = "email"
        ' add it to the list...
        customers.Add(newCustomer)
        
    End Sub
End Class
Public Structure Customer
    Public FirstName As String
    Public LastName As String
    Public Email As String
    Public ReadOnly Property Name() As String
        Get
            Return FirstName & " " & LastName
        End Get
    End Property
    Public Overrides Function ToString() As String
        Return Name & " (" & Email & ")"
    End Function
    Public Function IsEmpty() As Boolean
        If FirstName = "" Then
            Return True
        Else
            Return False
        End If
    End Function
End Structure
Public Class CustomerCollection
    Inherits System.Collections.CollectionBase
    Private _emailHashtable As New Hashtable()
    Public Sub Add(ByVal newCustomer As Customer)
        Me.List.Add(newCustomer)
        Dim useEmail As String
        useEmail = newCustomer.Email.ToLower
        EmailHashtable.Add(useEmail, newCustomer)
    End Sub
    Public Sub Remove(ByVal removeCustomer As Customer)
        Me.List.Remove(removeCustomer)
        Dim useEmail As String
        useEmail = removeCustomer.Email.ToLower()
        EmailHashtable.Remove(useEmail)
    End Sub
    Default Public Property Item(ByVal index As Integer) As Customer
        Get
            Return Me.List.Item(index)
        End Get
        Set(ByVal Value As Customer)
            Me.List.Item(index) = Value
        End Set
    End Property
    Public ReadOnly Property EmailHashtable() As Hashtable
        Get
            Return _emailHashtable
        End Get
    End Property
    Default Public ReadOnly Property Item(ByVal email As String) _
            As Customer
        Get
            email = email.ToLower()
            Return EmailHashtable.Item(email)
        End Get
    End Property
    Public Shadows Sub Clear()
        MyBase.Clear()
        EmailHashtable.Clear()
    End Sub
    Public Shadows Sub RemoveAt(ByVal index As Integer)
        Remove(Item(index))
    End Sub
End Class