0

我有一个如下所示的 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;
}

我希望对调用该函数的用户隐藏重试标志。

我需要该功能只执行两次。

我不想将函数设为静态,也不想为这个简单的需求声明一个外部变量,并且默认值是不够的。还有其他优雅的解决方案吗?

4

3 回答 3

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;
}
于 2012-04-15T08:13:20.657 回答
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;


}
于 2012-04-15T08:22:15.333 回答
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;
}

更新

与其将重试作为布尔值,我更愿意将其作为整数。这控制了退出条件。

    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);                       
    }
于 2012-04-15T08:22:28.010 回答