有没有办法让一个函数在条件不满足时重复执行?
有没有办法让一个函数在条件不满足时重复执行?
我有类似这样的代码:
static int cantryagain=0; private void myfunction(){ if (cantryagain==0) { if(variableA=1) { //做一些事情 //ta daaaa } else { //做一些神奇的事情,帮助variableA=1,但如果神奇的事情不起作用,我只希望它尝试一次。 tryagain(); } } } private void tryagain { myfunction(); cantryagain=1; //确保神奇的事情只发生一次,但很明显它永远无法达到这里,因为它会在之前再次执行myfunction... }
我知道这段代码非常糟糕。我对C#还比较新。
我应该如何正确实现类似的功能?
问题的出现原因:需要一个函数在条件不满足时重复执行自身。
解决方法:使用循环来实现。
代码示例:
while (not somethingMet): # do something
需要注意的是,`somethingMet`是一个否定的变量名,这在通常情况下是不被推荐的。有关更好的命名变量的建议,可以参考makinggoodsoftware.com/2009/05/04/71-tips-for-naming-variables和stackoverflow.com/a/1228106/211627。
问题的出现原因是希望在条件不满足时,函数能够重复执行。解决方法是使用循环结构来实现条件的判断和重复执行。下面是一种解决方案:
static int cantryagain=0; private void myfunction() { for (int i = 0; i < 2; i++) // 最多循环2次 { if(variableA==1) { // 执行操作 // ta daaaa break; // 退出循环,不再重复执行 } else if (i == 0) // 只在第一次迭代时尝试 { // 尝试一些魔法操作以使 variableA=1, // 但如果魔法操作不成功,我只希望它尝试一次。 } } }
通过尝试之前的方法后,我自己找到了解决方案,但我的解决方案与这个答案最接近,并且运行良好。谢谢。
问题的出现的原因是希望在不使用循环的情况下,使函数能够在条件不满足时重复执行。解决方法是使用递归调用函数并添加可选参数。
下面是一个示例代码,其中函数 `myfunction` 使用了递归调用来重复执行自身,直到满足条件或递归次数达到上限:
private void myfunction(int recursiveCount = 0) { if (recursiveCount > 1) { // 放弃执行 return; } if (variableA == 1) { // 执行相关操作 // ta daaaa } else { myFunction(++recursiveCount); } }
要使用该函数,只需调用函数而不提供参数:
myfunction();
需要注意的是,递归是一个高级主题,可能需要在掌握基础知识之后再来学习和使用。