将List(OfivedObject)转换为List(Of BaseObject)

时间:2012-04-03 14:07:42

标签: .net vb.net generics

说,我有一个操作基础对象列表的函数。但我有一个派生对象列表。改造它的最有效方法是什么?

我们有

Public Sub Main
  ...
  Dim myButtons as List(Of Button) = Me.GetMyButtons()
  Me.Delete(?? transform myButtons to myControls??)
  ...
End Sub 

Public Sub Delete(controls as List(Of Control)) ...

感谢。

2 个答案:

答案 0 :(得分:4)

您可以使用List(Of T).ConvertAll,或只使用Cast(Of T)ToList。我的VB语法可能有误,但是:

Me.Delete(myButtons.ConvertAll(Function(b) CType(b, Control)))

Me.Delete(myButtons.Cast(Of Control)().ToList())

或者,如果您使用的是.NET 4(具有通用的协方差),您可以使用:

Me.Delete(myButtons.ToList(Of Control)())

甚至更好,只需将Delete的签名更改为:

即可
Public Sub Delete(controls as IEnumerable(Of Control)) ...

答案 1 :(得分:1)

如果您需要明确的转化,SelectConvertAll,如果可以作为演员表完成,则可以使用Linq的Cast