以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  怎样退出递归函数?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=117850)

--  作者:huangxueyao
--  发布时间:2018/4/19 21:16:00
--  怎样退出递归函数?
通过递归函数来遍历BOM,当遇到一个子级跟最开始的父级相同时,退出遍历,直接判定BOM不合格。

我写的递归函数如下:
For Each dr As DataRow In dt1.DataRows
        Select Case style
            Case "1","2" \'外购+自产
                If dr("子级编号") = father Then
                    lst ="子孙级物料" & dr("父级编号") & "的结构中含有当前父级,将会导致死循环,不能设置!"
                    Exit For
                Else
                    lst = Functions.Execute("GetBOMSon",dr("子级编号"),dr("子级来源"),father)
                End If
            Case "3","4" \'分拣+转换
                If dr("父级编号") = father Then
                    lst ="子孙级物料" & dr("子级编号") & "的结构中含有当前父级,将会导致死循环,不能设置!"
                    Exit For
                Else
                    lst = Functions.Execute("GetBOMSon",dr("父级编号"),dr("父级来源"),father)
                End If
        End Select
    Next

实测发现,用exit for 无法实现需求,因为并不知道出现错误的时候已经遍历到第几层了,所以exit for 只是退出了一层的遍历,剩下的遍历还会继续。

请问应该怎么实现我的需求?


--  作者:有点甜
--  发布时间:2018/4/19 21:23:00
--  

参考这个例子

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=114803&skin=0