当前位置:编程学习 > C#/ASP.NET >>

写了个方法却总是不能正常返回一个值,大家来帮看看怎么回事



如图,这个方法通过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层。 --------------------编程问答-------------------- 是不是多线程里调用的,如果是就不奇怪了 --------------------编程问答--------------------
引用 5 楼 MicrosoftCenterOfHN 的回复:
你的情况说明命中return ture这行断点时执行的并不是第一层调用(第一层调用中这句话不会被执行到),而是递归里面的第x层调用,调用完成后,返回到第x-1层。


那该怎么解决啊 --------------------编程问答--------------------
引用 7 楼 u010411997 的回复:
Quote: 引用 5 楼 MicrosoftCenterOfHN 的回复:

你的情况说明命中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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,