.net 将(DerivedObject的)列表转换为(BaseObject的)列表
比如说,我有一个操作基本对象列表的函数。但是我有一个派生对象的列表。最有效的方法是什么 让我们吃点东西吧.net 将(DerivedObject的)列表转换为(BaseObject的)列表,.net,vb.net,generics,.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)) ...
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)) ...
谢谢。您可以使用T.ConvertAll列表,也可以使用CastOf T和ToList。我的VB语法可能错误,但:
Me.Delete(myButtons.ConvertAll(Function(b) CType(b, Control)))
或
或者,如果您使用.NET 4及其通用协方差,您可以使用:
Me.Delete(myButtons.ToList(Of Control)())
或者更好,只需将Delete的签名更改为:
您可以使用ListOf T.ConvertAll,或者只使用CastOf T和ToList。我的VB语法可能错误,但:
Me.Delete(myButtons.ConvertAll(Function(b) CType(b, Control)))
或
或者,如果您使用.NET 4及其通用协方差,您可以使用:
Me.Delete(myButtons.ToList(Of Control)())
或者更好,只需将Delete的签名更改为:
如果您需要显式转换,或者可以作为转换来完成,则可以使用Linq。如果您需要显式转换,或者可以作为转换来完成,则可以使用Linq。我无法更改删除的签名,我有一个疯狂的团队。。。谢谢最好是用按钮列表更改删除的签名。。。在我的情况下…@moldovanu:想要选项严格到完全相反的程度并没有什么疯狂的-我想说,大多数时候想要关闭它是疯狂的,但你仍然可以将签名更改为最新版本并使用通用协方差。我不能更改删除的签名,我有一个疯狂的团队。。。谢谢最好是用按钮列表更改删除的签名。。。在我的情况下…@moldovanu:想要选项严格到完全相反的程度并没有什么疯狂的-我想说,大多数时候想要关闭它是疯狂的,但你仍然可以将签名更改为最新版本,并使用通用协方差。