说,我有一个操作基础对象列表的函数。但我有一个派生对象列表。改造它的最有效方法是什么?
我们有
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)) ...
感谢。
答案 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)
如果您需要明确的转化,Select或ConvertAll,如果可以作为演员表完成,则可以使用Linq的Cast。