C#函数返回错误

时间:2014-04-30 10:18:46

标签: c# .net recursion

我是C#的新手,在编写面向这个奇怪问题的小功能时。在使用return语句时,我想返回到调用函数,但它在递归之前将我带到一个级别,并且永远不会退出递归函数。

我的代码如下:

private void findrel(String from, String to, List<RelAttr> relation)
    {
        String var;
        List<RelAttr> temp = new List<RelAttr>();

        for (int i = 0; i < relation.Count; i++)
        {
            if (Some Condition)
            {
                if (Another Condition)
                {
                    //Do Something
                    paths.Add(Something);
                    return;
                }
                else
                {
                    //Capture some value in var
                    paths.Add(Something);
                    //Move to Temp
                    temp.AddRange(relation);
                    //Remove Active Entry From Temp
                    temp.RemoveAt(i);
                    //Call with Newlist (temp)
                    findrel(var, to, temp);
                }
            }
        }
        //Remove Last Entry when recursion unwinds
        paths.RemoveAt(paths.Count - 1);
    }

我通常从其他功能调用此功能,例如:

findrel(from, to, relations);

我希望return语句返回到此函数,而不是递归之前的级别。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

return语句将始终返回给调用者,当您使用递归时,这将包括返回上面的级别,并且不会跳回原始调用者。

如果你想要离开findrel那么你将不得不做一些事情,比如返回一个标志,以便前一个级别知道它应该返回给它的调用者而不再进行任何处理。 / p>

因此,代码仍将从对findrel的所有调用中解除,但您将有效地停止处理。

答案 1 :(得分:1)

通常使用递归函数,您会有一个终止条件,并导致返回函数的所有级别返回,这将返回给调用者。一个建议可能是返回一个布尔值,如果该值为false,则终止递归。您可以将该条件添加到循环的终止条件中,并且您的函数将退出所有级别。