Recall方法,直到返回true
本文关键字:返回 true 方法 Recall | 更新日期: 2023-09-27 17:50:54
我有一个条件,我想调用一个方法,直到它返回true,如果返回true,则转到下一个语句,否则调用它自己
var username= GetUniqueUserName();
if(UtilityRepository.CheckUserName(username))
{
// next statement
}
else
{
// recall CheckUser
}
您可以
while(UtilityRepository.CheckUserName(username))
{
//code inside, if you need some, if not just leave this blank
}
//something after `CheckUserName` returned false.
使用while
而不是if
。(而不是条件。(
使用递归实现:
public void MyMethod()
{
var username= GetUniqueUserName();
MyImplementation(username);
}
private void MyImplementation(string userName)
{
if (!UtilityRepository.CheckUserName(username))
{
MyImplementation(userName);
return;
}
//actual stuff here
}
正如@asawyer所指出的,使用迭代实现,您的应用程序可能会陷入一个无限循环,让一个线程永久地向UtilityRepository提出相同的问题。使用递归实现,您可能会遇到StackOverflowException。这两种情况都相当不令人满意。您能否升级UtilityRepository
以在"用户名状态已更改"时收到通知?
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
上留空格。