Dim lineArray As New List(Of Coordinate)
Dim lineGeometry As LineString = New LineString(lineArray) // you create an empty linestring geometry
Dim lineFeature As DotSpatial.Data.IFeature = lineF.AddFeature(lineGeometry) //you create a feature with this empty geometry
lineFeature.Coordinates.Add(New Coordinate(coords(0).X, coords(0).Y, coords(0).Z, coords(0).M)) //you add your first coordinate to this feature
Dim existingFeature As DotSpatial.Data.IFeature = lineF.Features(lineF.Features.Count - 1) //you get the last feature in lineF, but you already have it in lineFeature
For i = 0 To coords.Count - 1
existingFeature.Coordinates.Add(New Coordinate(coords(i).X, coords(i).Y, coords(i).Z, coords(i).M)) //you add all your coordinates to existingFeature, but now it contains the first point twice
Next
If (existingFeature.Coordinates.Count >= 2) Then
lineF.InitializeVertices()
End If
If you simply want to have one LineString feature that contains all the coordinates you passed to the function, you could do it like this: Dim lineFeature As DotSpatial.Data.IFeature = lineF.AddFeature(New LineString(coords)) //create a new linestring feature with the given coordinates
lineFeature.DataRow("Owner") = "THE OWNER"
lineFeature.DataRow("OwnedSince") = Now.ToShortDateString
lineF.InitializeVertices()
Make sure that your LineStrings contain at least 2 different points, otherwise you'll get problems with invalid geometries.