首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectCast错误

DirectCast错误
EN

Stack Overflow用户
提问于 2014-09-19 23:22:46
回答 1查看 444关注 0票数 2

我有以下代码:

代码语言:javascript
复制
Imports System.Collections.ObjectModel

Public Class clsCellListExtender

    Public Class List(Of T)
        Inherits Collection(Of T)

        Private _iID As Integer = 0

        Protected Overrides Sub InsertItem(index As Integer, item As T)
            'your checks here

            If TypeOf (item) Is clsCell Then
                _iID += 1
                Dim nCell As clsCell = DirectCast(item, clsCell)
                nCell.TempID = _iID
            End If

            MyBase.InsertItem(index, item)
        End Sub

    End Class

End Class

当我试图编译它时,编译器在行中告诉我"T不能转换为clsCell“

代码语言:javascript
复制
Dim nCell As clsCell = DirectCast(item, clsCell)

有人能告诉我我做错了什么吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-20 00:01:21

我认为这里的问题是T并不局限于一个对象。您需要一些东西作为对象,或者实际上是clsCell类的任何祖先(只是该对象是所有类型的祖先,所以DirectCast总是与它一起工作)。请考虑以下示例:

代码语言:javascript
复制
Dim p As String
If TypeOf p Is Integer Then

End If

在这种情况下,编译器会抱怨:

类型'String‘的表达式永远不可能是'Integer’类型。

在您的示例中,编译器无法验证TclsCell之间是否始终存在继承关系。在大多数情况下,它们不会是一个,所以您不能使用DirectCast。

您的解决方案是使用不同的强制转换操作符,例如TryCast,至少它不会导致编译时错误。同样最好的方法是在这里解释一下您的意思,因为List(Of T)是.NET中的一个标准类型,所以制造另一个类型对造成混乱是很好的。

不过,使用相同的逻辑,我希望它在TypeOf行上失败。也许其他人可以详细说明这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25943681

复制
相关文章

相似问题

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