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

本文关键字:函数 调用者 隐藏 执行 状态 | 更新日期: 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);                       
    }