我有一个条件,我想调用一个方法,直到它返回true,如果返回true则转到下一个语句,否则回想一下
var username= GetUniqueUserName();
if(UtilityRepository.CheckUserName(username))
{
// next statement
}
else
{
// recall CheckUser
}
答案 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
上留下空白。