-5

我有个问题。
只要 Item.Length > 0,递归就可以正常工作。
当 Item.Length == 0 时,它会跳过该行:GetId(Id, result, Items); 转到return Id;具有正确 Id 的行,
然后不离开函数并返回 Id,
而是直接进行到GetId(Id, result, Items);
带有 PREVIOUS Id、result 和 Items 的行。

问题出在哪里?

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;
}
4

1 回答 1

3

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

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

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

相反,您可能打算返回递归调用返回的值:

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

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

于 2013-10-08T08:04:49.303 回答