如果我有一个名为Thing
的对象,其具有属性Id
和Children
,其中Children
基本上是Thing
的列表。它看起来像这样:
Public Class Thing
Public Property Id As Guid
Public Property Children As List(Of Thing)
End Class
现在给定一个现有的List(Of Thing)
,为了这个例子,让我们称之为aList
,我怎么能用递归循环抛出每个Thing和Children来查找是否有项目存在于整个层次结构中?
Dim aList As List(Of Thing)
顺便说一句,给定一个ID,如何针对aList
编写LINQ语句,以查看该ID是否存在于层次结构中的任何位置?
希望您能帮助我,并提前感谢您的贡献!
答案 0 :(得分:2)
Linq不是为递归而设计的,并且不能很好地处理它。有一些方法可以使用它,但标准的递归函数会更清晰,更容易调试:
Public Function IsInTree(Thing theThing, IEnumerable(Of Thing) tree) As Boolean
If tree.Any(Function(t) t.Id = theThing.Id) Then
IsInTree = True
ElseIf Children Is Not Nothing Then
IsInTree = tree.Any(Function(t) IsInTree(theThing, t.Children))
Else
IsInTree = False
End If
End Function