私はVB.netで作業しており、インタフェース、IBarを実装するClass、Fooを持っています。私はFooのリストを持っていますが、IBarのリストを関数に渡す必要がありますが、DirectCastを使用していてもキャストエラーが発生しています。私のコードは、私がVB.netでオブジェクトが実装しているインターフェイスの一覧にオブジェクトの一覧をキャストするにはどうすればよいですか?
Value of type 'System.Collections.Generic.List(Of FreezePod.Pod.Foo)' cannot be converted to 'System.Collections.Generic.List(Of FreezePod.Pod.IBar)'.
MainWorksを取得し、メインとメイン2の両方で
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
で動作しますが、どこでも私は、この関数を呼び出したいことをしなければならないのは本当に迷惑と非効率的になります。
この場合、適切ではないでしょう。 IBarの実装者は、すでにインタフェースが行っていることとは全く関係のない、異なる基本クラスを持っています。しかし、もしこれが再び起これば、私はそれを念頭に置いておきます。 – thefroatgt
サブクラスでジェネリックス手法を使用して更新しました。 – AnotherDan
ジェネリックのアプローチをテストしました。これはスムーズに動作しているようです。 – AnotherDan