为什么这不是有效的DirectCast:
Public Sub FB(OF T0 As IGH_Goo, T1 As IGH_Goo) _
(ByVal A As DataTree(Of T0), _
ByVal B As DataTree(Of T1))
Dim val_A As T1 = DirectCast(A.FirstItem, T1)
End Sub鉴于这是:
Public Sub FB(OF T0 As IGH_Goo, T1 As IGH_Goo) _
(ByVal A As DataTree(Of T0), _
ByVal B As DataTree(Of T1))
Dim val_A As T1 = DirectCast(DirectCast(A.FirstItem, Object), T1)
End Sub发布于 2009-10-22 02:47:13
编译器不能保证T0和T1可以相互转换。例如,T0可能是某个类C0 (继承自IGH_Goo),T1可能是某个类C1 (也继承自IGH_Goo)。
DirectCast的规则是:其中一个类必须是另一个类的子类。这就是为什么你的第二个例子是正确的:
T0 -> Object)是可以的,因为T0是Object的子类。Object -> T1)是可以的,因为T1是Object的子类(当然,这样的转换在运行时可能会失败)。您正在尝试的DirectCast (T0 -> T1)永远不会工作,除非是T0 = T1或T0 inherits from T1这种特殊情况。
在第一种情况下,您的代码应为
Public Sub FB(Of T As IGH_Goo)
(ByVal A As DataTree(Of T), ByVal B As DataTree(Of T)) 或者,在第二种情况下(也适用于第一种情况):
Public Sub FB(OF T0 As T1, T1 As IGH_Goo)
(ByVal A As DataTree(Of T0), ByVal B As DataTree(Of T1)) https://stackoverflow.com/questions/1575298
复制相似问题