写了个方法却总是不能正常返回一个值,大家来帮看看怎么回事
如图,这个方法通过DalUserInfo.RetStrInfo返回传递进来的ID的TreeID,然后和ToID比较看是否一样,一样的话返回true,否则递归下次查找,直到找到TreeID为root后返回false。
图中为调试结果,运行情况是,当TreeID等于ToID时,程序进入if后return true后跳到黑色箭头所指地方,然后又跳到蓝色箭头所指地方,而且它也没进入SearchID方法里面,是直接return false后跳到红色箭头所指地方,然后又跳到蓝色箭头所指地方,接着才return false退出方法。这是怎么回事啊,当TreeID等于ToID时,程序不是直接进入if后return true退出方法的吗。 --------------------编程问答-------------------- 不会的吧,你再设置断点单步调试看看。如果执行到return true就不会再执行下面的方法了。 --------------------编程问答-------------------- 是啊,我同事都说不应该的,这个就是单步调试得到的结果,当它return true后又跳到递归那里,而且之后是直接return false,执行了两次后退出的 --------------------编程问答-------------------- return SearchID(TreeID,ToId); --------------------编程问答-------------------- string TreeID = DalUserInfor.ResetStrInfor("TreeID", ID);
声明一个字符串,引用一个和本身文字一样的变量? --------------------编程问答-------------------- 你的情况说明命中return ture这行断点时执行的并不是第一层调用(第一层调用中这句话不会被执行到),而是递归里面的第x层调用,调用完成后,返回到第x-1层。 --------------------编程问答-------------------- 是不是多线程里调用的,如果是就不奇怪了 --------------------编程问答--------------------
那该怎么解决啊 --------------------编程问答--------------------
这个本身并没有什么对错呀,你代码怎么写就怎么执行了。
3楼说的有道理,你应该是少了个return.
如果最后是以return false退出,说明最终满足的是这个分支的条件。你说的解决是指什么呢? --------------------编程问答-------------------- 第二个分支里应该是这样
If(TreeID == ToId)
{
}
else if(TreeID != "root")
{
return SearchID(TreeID, ToId);
//重点就在return这里,走进去, 方法有返回值,但是方法调用处没有return,无法返回上一次调用,直到最后的return false才调出
}
return false;
补充:.NET技术 , C#