将对象转换回原始类型

时间:2016-03-18 13:07:17

标签: vb.net list casting derived-class

我在List(of BodyComponent)中有对象BodyComponent是基类,添加到列表中的项是来自派生类的对象。

Public Class Body_Cylinder

' Get the base properties
Inherits BodyComponent

' Set new properties that are only required for cylinders
Public Property Segments() As Integer
Public Property LW_Orientation() As Double End Class

现在我想将对象转换回它的原始类Body_Cylinder因此用户可以为对象输入一些特定于类的值。

但是我不知道如何进行这项操作,我找了一些相关的帖子,但这些都是用c#写的,其中我没有任何知识。

我认为答案可能在这里,但是......不能读它Link

1 个答案:

答案 0 :(得分:0)

您可以使用Enumerable.OfType- LINQ方法:

Dim cylinders = bodyComponentList.OfType(Of Body_Cylinder)()
For Each cylinder In cylinders
    '  set the properties here '
Next

该列表可以包含从BodyComponent继承的其他类型。

所以OfType做了三件事:

  1. 检查对象的类型是Body_Cylinder还是
  2. 过滤所有不属于该类型的
  3. 施放它。因此,您可以安全地使用循环中的属性。
  4. 如果您已经知道对象,为什么不简单地投射它?使用CTypeDirectCast

    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