vb.net - 循环遍历不同类型对象的组合列表
问题描述
我有两个清单。一个具有“Foo”类型,另一个具有“Bar”类型。
Foo 和 Bar 都恰好具有“a”的属性。
有没有办法循环遍历这两个列表并相互组合以检查属性 a 的值?
伪代码
for each item in FooList + BarList
if item.a = "this is the value" then
return True
end if
next
我不想单独遍历列表,尽管我知道这会起作用。
我不希望原始列表因附加而被修改。
Linq 答案是可以接受的。
上下文是我正在搜索 DXF 文件中的所有文本。其中一些文本称为 MTEXTS,而另一些则简称为 TEXT。MTEXT只是一个具有更多特征的文本,但无论其他属性是什么,这两者显然都包含“值”的共同属性。
更新
根据接受的答案中的代码,我能够想出一个快速的内联方法。
for each item in new List(Of Object)().Concat(FooList).Concat(BarList)
if item.a = "this is the value" then
return True
end if
next
解决方案
我相信这会引起许多人的愤怒,但这里有一种方法可以做到这一点。将列表转换为对象,然后将它们 Concat() 组合在一起,以便您可以枚举它们。现在使用 CallByName() 从它们那里获取“A”属性:
Public Class Form1
Private FooList As New List(Of Foo)
Private BarList As New List(Of Bar)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FooList.Add(New Foo() With {.A = "Bob"})
FooList.Add(New Foo() With {.A = "Dora"})
BarList.Add(New Bar() With {.A = "Pikachu"})
BarList.Add(New Bar() With {.A = "Aang"})
BarList.Add(New Bar() With {.A = "Joe"})
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
For Each O As Object In FooList.Cast(Of Object).Concat(BarList.Cast(Of Object))
Dim A As String = CallByName(O, "A", CallType.Get)
Debug.Print(A)
Next
End Sub
End Class
Public Class Foo
Public Property A As String
End Class
Public Class Bar
Public Property A As String
End Class
推荐阅读
- reactjs - React-Redux:可视化元素数组
- python-3.x - Apple Script:如何将用户输入保存到文本文件
- csv - 如何将变量保存到现有 CSV 文件的最后一行
- spring - 多个 Mono 和普通订户
- javascript - Javascript在反应中解构数据
- html - 将图像数据添加到 http 消息正文
- python - 如何点击 Instagram 上的关注按钮?
- python - 如何用 python2.7 调用 python3.6?
- kotlin - 为什么 Intellij 不为新的 kotlin 项目创建 build.gradle.kts?
- ecmascript-6 - 为什么我可以在导出模块中声明之前访问 const