VB.NET通用列表类型过滤器:怎么做?

时间:2011-01-13 23:04:45

标签: vb.net generics .net-4.0 filter type-conversion

我想编写一个泛型函数,它将在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 个答案:

答案 0 :(得分:2)

您需要约束TFilter继承T

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

答案 1 :(得分:2)

您实际上不需要为此编写任何代码。你可以打电话

listToFilter.OfType(Of TFilter).ToList()

有关详细信息,请参阅Enumerable.OfType的文档。

(我假设您使用的是.NET 3.5或更高版本。)