首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译时DirectCast不接受有效的转换(VB.NET)

编译时DirectCast不接受有效的转换(VB.NET)
EN

Stack Overflow用户
提问于 2009-10-15 21:48:43
回答 1查看 390关注 0票数 1

为什么这不是有效的DirectCast:

代码语言:javascript
复制
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

鉴于这是:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-22 02:47:13

编译器不能保证T0和T1可以相互转换。例如,T0可能是某个类C0 (继承自IGH_Goo),T1可能是某个类C1 (也继承自IGH_Goo)。

DirectCast的规则是:其中一个类必须是另一个类的子类。这就是为什么你的第二个例子是正确的:

  • DirectCast (T0 -> Object)是可以的,因为T0是Object的子类。
  • The DirectCast (Object -> T1)是可以的,因为T1是Object的子类(当然,这样的转换在运行时可能会失败)。

您正在尝试的DirectCast (T0 -> T1)永远不会工作,除非是T0 = T1T0 inherits from T1这种特殊情况。

在第一种情况下,您的代码应为

代码语言:javascript
复制
Public Sub FB(Of T As IGH_Goo)
           (ByVal A As DataTree(Of T), ByVal B As DataTree(Of T)) 

或者,在第二种情况下(也适用于第一种情况):

代码语言:javascript
复制
Public Sub FB(OF T0 As T1, T1 As IGH_Goo)
           (ByVal A As DataTree(Of T0), ByVal B As DataTree(Of T1)) 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1575298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档