问题描述
privatestringEnumVisual(VisualmyVisual){for(inti=0;i<VisualTreeHelper.GetChildrenCount(myVisual);i++){VisualchildVisual=(Visual)VisualTreeHelper.GetChild(myVisual,i);if(childVisual!=null){if(childVisualisTextBox){if(string.IsNullOrEmpty((childVisualasTextBox).Text)){//returnEnumVisual(childVisual);return(childVisualasTextBox).Name+"不能为空";}if(string.IsNullOrEmpty((childVisualasPasswordBox).Password)){return(childVisualasPasswordBox).Name+"不能为空";}}//(childVisualasTextBox).Text="Winner";EnumVisual(childVisual);}}return"success";}
stringresult=EnumVisual(this);执行发现,return后还会继续执行递归,求问这个问题出在哪里?
解决方案
解决方案二:
retur只是完成了当前这次执行,找一个条件,作为退出条件,每次执行都会判断,你的代码或许也有问题,导致出不去
解决方案三:
retur只是完成了当前这次执行,找一个条件,作为退出条件,每次执行都会判断,你的代码或许也有问题,导致出不去
解决方案四:
retur只是完成了当前这次执行,找一个条件,作为退出条件,每次执行都会判断,你的代码或许也有问题,导致出不去
解决方案五:
大概知道了,递归的原理忘了
解决方案六:
递归就是方法自身调用方法自身,你的return只是结束了当前方法,递归外面还有一堆等待执行的循环呢
解决方案七:
privatestringEnumVisual(VisualmyVisual){stringmessage=string.Empty;boolflag=true;for(inti=0;i<VisualTreeHelper.GetChildrenCount(myVisual);i++){VisualchildVisual=(Visual)VisualTreeHelper.GetChild(myVisual,i);if(childVisual!=null){if(childVisualisTextBox){if(string.IsNullOrEmpty((childVisualasTextBox).Text)){//returnEnumVisual(childVisual);message=(childVisualasTextBox).Name+"不能为空";flag=false;}}//(childVisualasTextBox).Text="Winner";if(childVisualisPasswordBox){if(string.IsNullOrEmpty((childVisualasPasswordBox).Password)){message=(childVisualasPasswordBox).Name+"不能为空";flag=false;}}if(flag){EnumVisual(childVisual);}else{returnmessage;}}}return"success";}}
这样也是一样的--。
解决方案八:
撸主,你递归调用,确实是return了,但是又继续下一次调用了。
解决方案九:
在整个运算过程中,VisualTreeHelper都没有发生改变所以在某个i时的VisualTreeHelper.GetChild(myVisual,i)取得的childVisual就可能与传入的myVisual相等,于是就产生了死循环所以你需要避免出现这种情况,递归前要判断childVisual!=myVisual才行由于不知道你的VisualTreeHelper是如何生成的,无法做进一步的建议
解决方案十:
将你的return语句替换为thrownewException("不能为空");然后在调用方用try..catch