none
将对象返回到原始类型 RRS feed

  • 问题

  • 我有一个List对象List(of BodyComponent),其中BodyComponent是个基类。这个List列表的内容新增, 是从它的派生类中加的。

    Public Class Body_Cylinder
    
    ' 基类
    Inherits BodyComponent
    
    ' 新增属性
    Public Property Segments() As Integer
    Public Property LW_Orientation() As Double End Class

    现在把这个List的对象转换成Body_Cylinder对象, 请问怎么做啊?

    2016年3月27日 3:47

答案

  • 你好,

    可以使用 Enumerable.OfType 来转换- LINQ 方法:

    Dim cylinders = bodyComponentList.OfType(Of Body_Cylinder)()
    For Each cylinder In cylinders
        ' 在这里设置属性
    Next
    

    这个List中可以包括其它继承自 BodyComponent的类

    那么 OfType 可以做以下几件事。

    1.检查对象是不是Body_Cylinder 类型

    2.去掉非Body_Cylinder类型的数据

    3. 转换成Body_Cylinder类型

    如果你已经这个对就是 Body_Cylinder 类型,可以直接使用CType 或者 DirectCast.来转换。

    Dim cylinder As Body_Cylinder = DirectCast(bodyComponentList(0), Body_Cylinder)

    如果你需要检查是不是这个类型,可以使用 TypeOf:

    If TypeOf bodyComponentList(0) Is Body_Cylinder Then
        Dim cylinder As Body_Cylinder = DirectCast(bodyComponentList(0), Body_Cylinder)
    End If

    或者使用: TryCast operator:

    Dim cylinder As Body_Cylinder = TryCast(bodyComponentList(0), Body_Cylinder)
    If cylinder IsNot Nothing Then
        ' safe to use properties of Body_Cylinder '
    End If 
    

    Best regards,

    Cole Wu

    2016年3月27日 4:58