Ich arbeite in VB.net und habe eine Klasse, Foo, die eine Schnittstelle implementiert, IBar. Ich habe eine Liste von Foo's, aber ich muss eine Liste von IBar's in einer Funktion übergeben, aber ich bekomme Casting Fehler, auch wenn ich DirectCast benutze. Mein Code istWie kann ich eine Liste eines Objekts in eine Liste einer Schnittstelle umwandeln, die das Objekt in VB.net implementiert?
Class Foo
Implements IBar
End Class
Interface IBar
End Interface
Sub DoIt(ByVal l As List(Of IBar))
End Sub
Sub Main()
Dim FooList As New List(Of Foo)
DoIt(FooList)
End Sub
Sub Main2()
Dim FooList As New List(Of Foo)
DoIt(DirectCast(FooList, List(Of IBar)))
End Sub
Sub MainWorks()
Dim FooList As New List(Of Foo)
Dim IBarList As New List(Of IBar)
For Each f As Foo In FooList
IBarList.Add(f)
Next
DoIt(DirectCast(IBarList, List(Of IBar)))
DoIt(IBarList)
End Sub
in den beiden Haupt und Main2 ich
Value of type 'System.Collections.Generic.List(Of FreezePod.Pod.Foo)' cannot be converted to 'System.Collections.Generic.List(Of FreezePod.Pod.IBar)'.
Mainworks arbeitet, aber es wäre wirklich ärgerlich und ineffizient sein überall zu tun zu haben, dass ich will, diese Funktion aufzurufen.
In diesem Fall wäre das nicht angemessen. Die Implementierer von IBar haben bereits verschiedene Basisklassen, die völlig unabhängig sind von dem, was die Schnittstelle tut. Ich behalte das im Hinterkopf, wenn das wieder auftaucht. – thefroatgt
Ich aktualisiert mit einem Generika-Ansatz in der Sub, könnten Sie sich ansehen. – AnotherDan
Ich habe den Generics-Ansatz getestet - es scheint reibungslos zu funktionieren. – AnotherDan