我有一个通用类Command(Of T)
命令(部分)定义为:
Public Class Command(Of T As BaseType)
Inherits Command
Public Property Condition As Func(Of T, Boolean)
End Class
我想创建一个所有命令的列表,然后当我收到一个 objectA
时,拉出所有与我的通用类型相同的命令,A
调用Condition(A)
返回 true
我可以
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))
由于 CommandsOfTypeAList(Of Command)
不是List(Of Command(Of DerivedType))
我错过了什么?