.net - 控制迭代循环内的递归

标签 .net vb.net algorithm recursion iteration

我正在尝试构建一个属性检查器方法,该方法迭代检查所有对象属性并递归检查这些属性的所有子属性,直到它用完所有属性或达到最大递归级别/深度。

但是,由于递归发生在迭代循环内部,因此我在跟踪递归深度时遇到了问题,因此对象的每个属性都会增加递归深度,而当它不应该增加时,只会增加下一个应该降低水平。

这是我的示例代码:

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/

相关文章:

.net - Entity Framework Core 连接管理

c# - 将所有单元格从 datagridview 更新到数据库

c# - Lock 语句 - 它总是释放锁吗?

vb.net - 有没有一种安全的方法可以从 Internet 连接到 Active Directory?

sql - 重新排序 SQL Server 数据库中的项目

.net - 为什么在IE8中查看时 session cookie只显示DOMAIN的 '.com'?

vb.net - VB.NET 中的延迟执行?

c# - 用户控件的可见属性何时会影响其子项?

algorithm - 计算算法的时间复杂度

algorithm - 如何给表达式加括号?