递归方法c#

时间:2018-03-23 10:13:00

标签: c# .net recursion

我做了这个递归函数,但是在“返回”之后它跳回到行GetProp(classes, obj);,所以它返回两次,我得到一个错误的值。

这就是我如何调用方法

foreach (string fieldKey in fieldKeys)
{
   Console.WriteLine(fieldKey);
   var props = fieldKey.Split('.');
   form.SetField(fieldKey, GetProp(props, inv));
}

这是方法

public static string GetProp(string[] classes, object oldObj)
{
     var obj = oldObj.GetType().GetProperty(classes[0]).GetValue(oldObj, null);
     if(classes.Length>1)
     {
        classes = classes.Skip(1).ToArray();
        GetProp(classes, obj);
     }
        return obj.ToString();
}

3 个答案:

答案 0 :(得分:1)

我认为你需要在递归时获得回报。

 public static string GetProp(string[] classes, object oldObj)
 {
 var obj = oldObj.GetType().GetProperty(classes[0]).GetValue(oldObj, null);
 if(classes.Length>1)
   {
    classes = classes.Skip(1).ToArray();
    return GetProp(classes, obj);
   }
      return obj.ToString();
 }

答案 1 :(得分:0)

使用递归时需要返回字符串。

示例:

public int recursive(int i){
    if(i == 1){
       i = i + 1;
       return recursive(i);
    }
    return i;
}

尝试

return GetProp(classes, obj);

答案 2 :(得分:0)

它没有跳过这实际上最近一次调用返回主调用任何方式修复此问题你需要返回最近的值只需更改GetProp(classes,object);return GetProp(classes,object);