First off, it is bittersweet to be ahead of your class. Bitter due to having a higher chance to make errors on code that you can't fully understand, but sweet because you can use the time to improve your coding/understanding of the language and logic.
As for this:
Public Function ReadLine(ByVal lineNumber As Integer, ByVal lines As List(Of String)) As String
Return lines(lineNumber - 1)
End Function
If the value of lineNumber is equal to zero or greater than the size of the list + 1 you will always get this error.
You can fix this with something like this:
Public Function ReadLine(ByVal lineNumber As Integer, ByVal lines As List(Of String)) As String
If lineNumber - 1 > lines.Count - 1 Then Return "lineNumber was to large for the list: " & (lineNumber - 1) & " > " & lines.Count
Return lines(lineNumber - 1)
End Function
If you are trying to retreive the last element in the list, try this:
Public Function ReadLine(ByVal lines As List(Of String)) As String
If lines.Count <=0 Then
Return String.Empty
Else
Return lines(lines.Count - 1)
End If
End Function
This will return the last element of the list, being the last line read in from the text file.