VB.NET Универсальный фильтр типов списков: как это сделать? - PullRequest
0 голосов
/ 14 января 2011

Я хотел бы написать универсальную функцию, которая будет искать в List (Of T) все элементы типа TFilter и возвращать List (Of TFilter), который содержит эти элементы. Я пробовал это:

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

Но выдает следующую ошибку:

Значение типа 'T' не может быть преобразовано на «TFilter».

Есть ли способ сделать это или я SOL?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 14 января 2011

На самом деле вам не нужно писать код для этого.Вы можете просто позвонить

listToFilter.OfType(Of TFilter).ToList()

См. Документы для Enumerable.OfType для получения более подробной информации.

(я предполагаю, что вы используете .NET 3.5 или выше.)

2 голосов
/ 14 января 2011

Вам нужно ограничить TFilter для наследования T:

Public Function FilterList(Of T, TFilter As T)(...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...