我正在尝试构建一个属性检查器方法,该方法迭代检查所有对象属性并递归检查这些属性的所有子属性,直到它用完所有属性或达到最大递归级别/深度。
但是,由于递归发生在迭代循环内部,因此我在跟踪递归深度时遇到了问题,因此对象的每个属性都会增加递归深度,而当它不应该增加时,只会增加下一个应该降低水平。
这是我的示例代码:
Dim MaxRecursionLevel As Integer = 10
Dim CurrentRecursionLevel As Integer = 1
Function GetPropertiesWithName(objToSearch as Object, optional nameFilters as String()
dim result as new List(of Object)
If CurrentRecursionLevel > MaxRecursionLevel Then Exit Function
CurrentRecursionLevel = CurrentRecursionLevel + 1
'Iteration of properties
For Each item As PropertyInfo In objToSearch.GetType.GetProperties()
if PropertyHasName(nameFilters) Then
result.Add(item)
dim subItem as Object = item.GetValue(objToSearch, Nothing)
'Recursion of Subproperties
dim subResult as List(of Object) = GetPropertiesWithName(subItem, nameFilters)
if not subResult is Nothing then result.Addrange(subResult)
End If
Next
Return result
End Function
我怎样才能准确地跟踪递归深度,或者是否有更好的方法来解决这个问题?
最佳答案
不是使用全局变量来跟踪递归,而是将当前递归级别作为参数传递给您的函数。在函数的顶部,检查传入的值是否超过最大值,如果超过则立即返回。
关于.net - 控制迭代循环内的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35547353/