2011-01-13 5 views
0

Ich möchte eine generische Funktion schreiben, die eine List (Of T) für alle Elemente vom Typ TFilter suchen und eine List (Of TFilter) zurückgeben würde, die diese Elemente enthält. Ich habe dies versucht:VB.NET Generischer List-Typ-Filter: Wie geht es?

Public Function FilterList(Of T, TFilter)(ByVal ListToFilter As List(Of T)) As List(Of TFilter) 
    Return ListToFilter.FindAll(Function(z) z.GetType.Equals(GetType(TFilter))).ConvertAll(New Converter(Of T, TFilter)(Function(z) CType(z, TFilter))) 
End Function 

Aber es gibt die folgenden Fehler:

Value of type 'T' cannot be converted to 'TFilter'.

Gibt es eine Möglichkeit, dies zu tun, oder bin ich SOL?

Viele Dank im Voraus

+0

Was auf Werte geschehen soll, die 'TFilter' erben? – SLaks

Antwort

2

Sie müssen TFilter beschränken T zu erben:

Public Function FilterList(Of T, TFilter As T)(... 
+0

ah ha! Danke vielmals. –

2

Sie eigentlich keinen Code dafür schreiben müssen. Sie können einfach anrufen

listToFilter.OfType(Of TFilter).ToList() 

die Dokumentation Siehe Enumerable.OfType für weitere Details.

(Ich gehe davon aus Sie .NET 3.5 oder höher verwenden.)

+0

Oooh ... Ich war mir nicht bewusst. Danke für den Tipp! –