2012-04-15 6 views
0

から隠され、状況に応じて実行する機能を必要としています。は、私は次のようになり、C#の機能を持って、発信者

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

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

+0

再試行を構成変数にしてみてください。それに基づいて、再試行フラグを持つことができます。 – Jagannath

+0

'再試行 'の価値は誰が決めるべきですか?なぜこのフィールドを宣言したくないのですか? – svick

答えて

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; 


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

生産中にいつか再試行しないと決定したらどうなりますか? – Jagannath

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

UPDATE

代わりに、ブール値として再試行したのは、私は整数としてそれを持っ好むだろう。これは終了条件を制御します。

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);      
    } 
関連する問題