2012-04-15 7 views
0

Ich habe eine C# Funktion, die wie folgt aussehen:Ich muss funktionieren nach Status ausgeführt werden, versteckt vom Anrufer

bool func(string name, bool retry) 
{ 
    string res= SomeOp(name); 
    if(res=="whatever") 
    { 
     return true; 
    } 
    else 
    { 
     if(retry) 
      return func(res, false) 
    } 
    return false; 
} 

ich die Wiederholungs Flag wollen von dem Benutzer die Funktion aufrufen versteckt werden.

Ich brauche die Funktion nur zweimal ausgeführt werden.

Ich möchte nicht die Funktion statisch machen, und ich möchte nicht eine externe Variable für diese einfache Notwendigkeit zu deklarieren, und ein Standardwert ist nicht genug. Gibt es noch eine andere elegante Lösung?

+0

Versuchen Sie, den Wiederholungsversuch als Konfigurationsvariable auszuführen. Basierend darauf könnten Sie eine Wiederholungsflagge haben. – Jagannath

+0

Wer sollte den Wert von 'retry' entscheiden? Warum willst du kein Feld dafür deklarieren? – svick

Antwort

1

Sie können

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

So ähnlich?

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

Was ist, wenn die Entscheidung nicht irgendwann nach der Produktion wiederholt wird? – Jagannath

0

wie diese etwas tun Beachten Sie, dass es für Wiederholungs keine Exit-Bedingung ist und wenn die Antwort nicht „was auch immer“ immer, dann ist die Rekursion nicht zu Ende und wir nur end mit dem "Namensvetter" dieser Seite.

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

Statt wie Bool wiederholen ist, würde ich es vorziehen, sie als ganze Zahl mit. Dies steuert die Ausgangsbedingung.

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