parentid     elementid
0              1
1              2
1              3
2,3是1的子节点,1是顶级节点,顶级节点的parentid=0
private int GetTopId(int elementId)
    {
        try
        {
            int r = 0;
            DataTable dt = ElementData.GetData(elementId);
            if (dt.Rows[0][0].ToString() != "0")
            {
                GetTopId(int.Parse(dt.Rows[0][0].ToString()));
            }
            else
            {
                r = int.Parse(dt.Rows[0][1].ToString());
            }
            return r;
        }
        catch (Exception e)
        {
            throw e;
        }
    }
--------------------------------------------
执行方法为GetTopId(2)GetData方法会返回两个字段的值,判断如果返回的parentid=0则是顶级节点return这条记录的elementid
但是我现在执行return后程序又再次执行了一次GetTopId(2),最后返回了一个0
我实在是想不明白为什么在return后还会再执行一次

解决方案 »

  1.   

    try:
    GetTopId(int.Parse(dt.Rows[0][0].ToString())); 
    ===>
    return GetTopId(int.Parse(dt.Rows[0][0].ToString())); 
      

  2.   

    啥叫return后又执行一次? 
    这个return是里面那层GetTopId(int.Parse(dt.Rows[0][0].ToString()))的返回值吧...
      

  3.   

    这个return是方法的返回值 递归的调用方法和循环的迭代可是两个东东 方法的返回值只能返回这一次的调用结果 不可能一下子就跳到最外面啊
      

  4.   

    你这里是递归,必然每次调用都会return啊