2016-04-04 5 views
1

Ich versuche, eine Recursive-Funktion mit notwendigen Parameter zu schreiben, aber ich möchte nicht, dass einige der Parameter beim Aufruf der Funktion verwendet werden.Wie füge ich unzugängliche Parameter in einer rekursiven Funktion in C# hinzu?

Und ich weiß, wie optionale Parameter zu machen, aber ich will noch wissen, ob es möglich ist, so etwas wie eine ‚private Parameter‘ zu machen:

zum Beispiel eine Funktion, die den Wert einer Zahl von 10 angetrieben zurück :

static int foo(int par, private int count = 0) 
{ 
    if (count == 9) 
    { 
     return par; 
    } 
    return foo(par, count + 1) * par; 
} 

In der Funktion foo möchte ich, dass der Parameter 'count' nicht zugreifbar oder privat ist.

+0

die akzeptierte Antwort des Duplikats in der Tat bietet die bestmögliche Antwort – Breeze

Antwort

1

Sie können in einem Methodenaufruf keine Parameter festlegen, sondern nur die vollständige Methode. Mit etwas Überlastung ist dies möglich:

Sie so etwas tun könnte:

private static int foo(int par, int count = 0) 
{ 
    if (count == 9) 
    { 
     return par; 
    } 
    return foo(par, count + 1) * par; 
} 

public static int foo(int par) 
{ 
    return foo(par, 0); 
} 
+0

es nicht notwendig ist, die Antwort von der doppelten Frage zu wiederholen! – Breeze

0

können Sie einen inneren Delegat verwenden (wie Func<int, int>) die eigentliche Arbeit zu kapseln und erfassen count einen Verschluss mit (das wird ersparen Sie sich aus der Notwendigkeit count als Parameter zu übergeben):

static int foo(int par) 
{ 
    int count = 0; 
    Func<int, int> f = null; 

    f = x => 
    { 
     if (count == 9) 
      return par; 

     count++; 
     return f(x) * x; 
    }; 

    return f(par); 
}