召回方法直到返回true

时间:2014-03-19 15:04:00

标签: c#

我有一个条件,我想调用一个方法,直到它返回true,如果返回true则转到下一个语句,否则回想一下

     var username= GetUniqueUserName();
     if(UtilityRepository.CheckUserName(username))
     {
                   // next statement
     }
     else
     {
      // recall CheckUser               

     }

4 个答案:

答案 0 :(得分:2)

你可以

while(UtilityRepository.CheckUserName(username))
{
   //code inside, if you need some, if not just leave this blank
}


//something after `CheckUserName` returned false.

答案 1 :(得分:1)

使用while代替if。 (而不是条件。)

答案 2 :(得分:-1)

使用递归实现:

public void MyMethod()
{
    var username= GetUniqueUserName();
    MyImplementation(username);
}

private void MyImplementation(string userName)
{
    if (!UtilityRepository.CheckUserName(username))
    {
        MyImplementation(userName);
        return;
    }

    //actual stuff here
}

使用迭代实现,您的应用程序可能会陷入无限循环,有一个线程永久地向UtilityRepository询问相同的问题,正如@asawyer指出的那样。使用递归实现,您可能会遇到StackOverflowException。这两种情况都令人不满意。当"用户名的状态发生变化时,您是否可以升级UtilityRepository以获取通知" ?

答案 3 :(得分:-2)

var username= GetUniqueUserName();
while ( UtilityRepository.CheckUserName(username) )
{
    //recall user
}
// next statement

或更多收费,但功能相同:

var username= GetUniqueUserName();
bool flag = true;
while ( flag )
{
     if(UtilityRepository.CheckUserName(username))
     {
          // next statement
          flag = false;
     }
     else
     {
          // recall CheckUser               
     }
}

但它看起来很糟糕,我认为你应该将你的.CheckUserName方法划分为两个或更多分开的方法,所以你不需要在// recall Chechuser上留下空白。