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;
}

関数を呼び出すユーザーから再試行フラグを非表示にしたい。

関数を 2 回だけ実行する必要があります。

関数を静的にしたくありません。また、この単純な必要性のために外部変数を宣言したくありません。デフォルト値では不十分です。他のエレガントなソリューションはありますか?

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 に答える