我需要根据状态执行函数,隐藏在调用者之外

时间:2012-04-15 08:08:35

标签: c# recursion hidden

我有一个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;
}

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

我需要只执行两次函数。

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

3 个答案:

答案 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);                       
    }