是否有一种特殊的语法只能循环集合中某种类型的元素?
例如:
For Each number As Integer In {0, "string", 4.6, 7, someClassInstance}
Next
我想要一个与上面类似的语法,它只会遍历数组中的第一个和第四个元素。
然而,根据the documentation:
"元素的数据类型必须能够将组元素的数据类型转换为它。"
所以我不能使用上面的语法来做这样的事情。
我在代码中处理的实际示例是:
Public MustInherit Class BaseClass
End Class
Public Class SubClass1 : Inherits BaseClass
Public x As Integer
End Class
Public Class SubClass2 : Inherits BaseClass
End Class
主要代码:
Dim someList As List(Of BaseClass)
For Each instance In someList
'Do something with instance.x
Next
因此,我需要检查instance
是否为SubClass1
类型,并在每次使用x
时投放。
前一段时间我问过this question斯威夫特。我希望在VB中有类似的答案。
答案 0 :(得分:1)
没有没有“特殊语法”,因为异构集合通常不是的方式 .Net
但是,您可以使用OfType根据某种类型“过滤”该集合:
For Each number In {0, "string", 4.6, 7, someClassInstance}.OfType(Of Integer)
注意:只有当Option Strict设置为Off时才能编译代码,因为Option Strict On禁止隐式对象类型
关于编辑,当你有一个基础集合时,通常需要检查派生类型的代码气味;意味着类层次结构中应该有一个mustoverride / overridable方法来处理它。