递归而不是退出(c#)

时间:2013-10-08 08:01:54

标签: c# visual-studio-2010 recursion return

我有问题。
只要Item.Length> 1,递归就可以正常工作。 0
当Item.Length == 0时,它会跳过这一行:GetId(Id, result, Items); 转到具有正确ID的行return Id;
然后不是离开函数并返回Id,
它直接进入GetId(Id, result, Items);行 使用PREVIOUS Id,结果和项目。

问题出在哪里?

private string GetId(string Id, List<something> result, string[] Items)
{
     try
     {
            // some code

            if (Items.Length != 0)
                  GetId(Id, result, Items);
     }
     catch (Exception e){}

     return Id;
}

1 个答案:

答案 0 :(得分:3)

是的,它会的。看看你的代码:

if (Items.Length != 0)
    GetId(Id, result, Items);

哪一部分说应该退出方法?它没有。它只是调用GetId并完全忽略结果。

相反,您可能想要返回递归调用返回的值:

if (Items.Length != 0)
    return GetId(Id, result, Items);

顺便说一句,我希望你真正的异常处理更好 - 捕捉Exception通常是一个坏主意,并且默默吞咽它几乎总是一个坏主意......