将对象转换回原始类型
Cast object back to original type
我在 List(of BodyComponent)
中有对象 BodyComponent
是一个基础 class,添加到列表中的项目是来自派生 class 的对象。
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
现在我想将对象转换回原来的状态 class Body_Cylinder
这样用户就可以为对象输入一些 class 特定值。
但是我不知道怎么操作,我找了一些相关的帖子,但是都是c#
里面写的,我也不知道
我想答案可能就在这里,但是..看不懂Link
您可以使用 Enumerable.OfType
- LINQ 方法:
Dim cylinders = bodyComponentList.OfType(Of Body_Cylinder)()
For Each cylinder In cylinders
' set the properties here '
Next
该列表可以包含继承自 BodyComponent
的其他类型。
所以 OfType
做了三件事:
- 检查对象是否属于
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
Dim cylinder As Body_Cylinder = TryCast(bodyComponentList(0), Body_Cylinder)
If cylinder IsNot Nothing Then
' safe to use properties of Body_Cylinder '
End If
我在 List(of BodyComponent)
中有对象 BodyComponent
是一个基础 class,添加到列表中的项目是来自派生 class 的对象。
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
现在我想将对象转换回原来的状态 class Body_Cylinder
这样用户就可以为对象输入一些 class 特定值。
但是我不知道怎么操作,我找了一些相关的帖子,但是都是c#
里面写的,我也不知道
我想答案可能就在这里,但是..看不懂Link
您可以使用 Enumerable.OfType
- LINQ 方法:
Dim cylinders = bodyComponentList.OfType(Of Body_Cylinder)()
For Each cylinder In cylinders
' set the properties here '
Next
该列表可以包含继承自 BodyComponent
的其他类型。
所以 OfType
做了三件事:
- 检查对象是否属于
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
Dim cylinder As Body_Cylinder = TryCast(bodyComponentList(0), Body_Cylinder)
If cylinder IsNot Nothing Then
' safe to use properties of Body_Cylinder '
End If