返回而不是退出的递归(c#)

返回而不是退出的递归(c#),c#,visual-studio-2010,recursion,return,C#,Visual Studio 2010,Recursion,Return,我有个问题。 只要Item.Length>0,递归就可以正常工作。 当Item.Length==0时,它跳过以下行:GetId(Id,result,Items) 转到行返回Id具有正确的Id, 然后不是离开函数并返回Id, 它直接指向行GetId(Id,result,Items) 使用以前的Id、结果和项目 问题在哪里 private string GetId(string Id, List<something> result, string[] Items) { try

我有个问题。
只要Item.Length>0,递归就可以正常工作。
当Item.Length==0时,它跳过以下行:
GetId(Id,result,Items)
转到行
返回Id具有正确的Id,
然后不是离开函数并返回Id,
它直接指向行
GetId(Id,result,Items)
使用以前的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;
}
私有字符串GetId(字符串Id、列表结果、字符串[]项)
{
尝试
{
//一些代码
如果(Items.Length!=0)
GetId(Id、结果、项目);
}
捕获(例外e){}
返回Id;
}

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

if (Items.Length != 0)
    GetId(Id, result, Items);
哪一部分说它应该退出该方法?没有。它只调用
GetId
,并完全忽略结果

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

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

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

请发布完整的代码,即使返回,这不会进入无限循环吗?他递归地调用这个方法,每次都使用相同的数据。因此,如果它没有第一次击中他的区块
(Length!=0)
,它永远不会。是的,我处理它的方式不同,只是不想在这里复制整个内容@yvindKnobloch Brå那么:我希望用“一些代码”来处理它。这肯定不是世界上最清楚的问题…有些代码很好!将其称为id++或其他名称。。。但是,即使使用“return”关键字,它仍然会返回id,返回带有旧值的getId(id、result、items),返回带有相同旧值的id并退出。(当它转到getId(..)时)行,它没有进入函数,只是把所有的values@user990635当前位置恐怕您的问题过于混乱,无法回答。您遗漏了重要的代码,没有解释您正在尝试执行的操作,并且您对出错原因的描述很难理解。您应该尝试编写一个简短但完整的示例,以便我们能准确地看到发生了什么。请阅读