Le insidie del DirectCast

Oggi mentre stavo scrivendo del codice per caricare un ListView mi sono imbattuto in un errore (mio sia ben chiaro) subdolo (almeno per me).

Per velocizzare il caricamento del listview mi ero creato un arraylist contenente gli item da aggiungenre e per aggiugerli al ListView ho usato il metodo AddRange:

Me.lsvMain.Items.AddRange(DirectCast(items.ToArray(), System.Windows.Forms.ListViewItem()))

Risultato un errore a runtime di Invalid Cast.
Ed è vero perche il metodo ToArray restituisce un array di Object quindi la DirectCast non può funzionare.

Ciò che è strano però è che neppure il CType funziona:

Me.lsvMain.Items.AddRange(CType(items.ToArray(), System.Windows.Forms.ListViewItem()))

A questo punto la soluzione è stata quella di utilizzare un override della ToArray

Me.lsvMain.Items.AddRange(DirectCast(items.ToArray(GetType(System.Windows.Forms.ListViewItem)), System.Windows.Forms.ListViewItem()))