Per estrarre gli indici in cui compare la stringa "Pluto" nella tua lista di stringhe puoi riscrivere il codice in questo modo:
Dim ListaStringhe As New List(Of String)
ListaStringhe.Add("Pippo") ' 0
ListaStringhe.Add("Pluto") ' 1
ListaStringhe.Add("Paperino") ' 2
ListaStringhe.Add("Pluto") ' 3
Dim sStringaRiferimento As String = "Pluto"
Dim q As IEnumerable(Of Integer) = ListaStringhe.Select( _
Function(nome, indice) New With {nome, indice}) _
.Where(Function(item) item.nome.Equals(sStringaRiferimento)) _
.Select(Function(item) item.indice)
Vorrei precisare che nel metodo IndexOf non c'è nessun tranello, in quanto, nella documentazione del metodo è riportato quanto segue (
da MSDN):
"Cerca l'oggetto specificato e restituisce l'indice in base zero
della prima occorrenza nell'intera classe Collection(T)"
Metodo Alternativo
Dim q1 = Nomi.Select(Function(v, i) RicercaNome(v, "Antonio", i)).Where(Function(i) i >= 0)
dove RicercaNome è cosi definito:
Private Function RicercaNome(ByVal a As String, ByVal b As String, ByVal c As Integer) As Integer
If (a.Equals(b)) Then
Return c
Else
Return -1
End If
End Function