我有一个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;
}
我希望从调用该函数的用户隐藏重试标志。
我需要只执行两次函数。
我不想让函数变为静态,我不想为这个简单的需要声明一个外部变量。并且默认值是不够的。 还有其他优雅的解决方案吗?
答案 0 :(得分:1)
这样的东西?
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;
}
答案 1 :(得分:1)
你可以做这样的事情
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;
}
答案 2 :(得分:0)
请注意,没有退出条件进行重试,如果答案不是“总是”,那么递归不会结束,我们只会以此网站的“同名”结束。
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;
}
<强>更新强>
而不是像bool一样重试,我宁愿把它作为整数。这可以控制退出条件。
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);
}