我需要根据状态执行函数,对调用者隐藏
本文关键字:函数 调用者 隐藏 执行 状态 | 更新日期: 2023-09-27 18:31:21
我有一个看起来像这样的 C# 函数:
bool func(string name, bool retry)
{
string res= SomeOp(name);
if(res=="whatever")
{
return true;
}
else
{
if(retry)
return func(res, false)
}
return false;
}
我希望重试标志对调用函数的用户隐藏。
我只需要执行两次函数。
我不想使函数成为静态的,也不想为这个简单的需要声明一个外部变量,默认值是不够的。还有其他优雅的解决方案吗?
你可以做这样的事情
public bool func(string name)
{
var retryCount = 1;
string result = string.Empty;
while (retryCount <=2)
{
result = DoSomething(name);
if(result =="Whatever")
return true;
retryCount ++;
}
return false;
}
像这样的东西?
public bool func(string name)
{
return func(name, true);
}
private bool func(string name, bool retry)
{
string res= SomeOp(name);
if(res=="whatever")
{
return true;
}
else
{
if(retry)
return func(res, false)
}
return false;
}
请注意,重试没有退出条件,如果答案并不总是"随便",那么递归不会结束,我们只会以本网站的"同名"结束。
public bool fun(string name)
{
bool retry = Properties.Resources.retry == "true";
string result = Get(name);
if (result == "whatever")
{
return true;
}
else if (retry)
{
Console.WriteLine("Retrying");
return fun(name);
}
return false;
}
更新
与其将重试作为布尔值,我更喜欢将其作为整数。这将控制退出条件。
private bool fun(string name, int retryCount)
{
string result = Get(name);
if (result == "whatever")
{
return true;
}
if (retryCount > 0)
{
return fun(name, retryCount - 1);
}
return false;
}
public static bool fun(string name)
{
bool retry = Properties.Resources.retry == "true";
int retryCount = Int32.Parse(Properties.Resources.retryCount);
return fun(name, retryCount);
}