ジェネリッククラスがありますCommand(Of T)
コマンドは(部分的に)次のように定義されます:
Public Class Command(Of T As BaseType)
Inherits Command
Public Property Condition As Func(Of T, Boolean)
End Class
すべてのコマンドのリストを作成したいのですが、オブジェクトが渡されたら、の呼び出しがtrueを返すA
私のと同じジェネリック型のすべてのコマンドを引き出しますA
Condition(A)
できます
Dim B As List(Of BaseType)
B.Add(New DerivedType)
だが
Dim C As New List(Of Command(Of BaseType))
C.Add(New Command(Of DerivedType))
変換エラーをスローします。
Command
非ジェネリックオブジェクトから継承させることができます(それを呼びましょうCommandBase
...)
Dim C As New List(Of CommandBase)
C.Add(New Command(Of DerivedType))
これは機能しますが、タイプ固有の参照に戻ることができなくなりました。これにより、適切なコマンドオブジェクトが取得されます。
Dim CommandsOfTypeA = B.Where(function(x) x.GetType.GetGenericArguments(0).FullName = A.GetType.FullName)
でも今はどうしたらいいのかわからない…
Dim MatchingCommands = CommandsOfTypeA.Where(function(x) c.Condition(A))
CommandsOfTypeAはそうではList(Of Command)
ないのでList(Of Command(Of DerivedType))
私は何が欠けていますか?