Verwenden Sie eine Funktion, um einen optionalen Parameter zu definieren

8

Ist es möglich, den Rückgabewert einer Funktion anstelle eines bestimmten Werts als optionalen Parameter in einer Funktion zu verwenden? Zum Beispiel anstelle von:

public void ExampleMethod(int a, int b, int c=10)
{
}

Ich möchte so etwas wie

private int ChangeC(int a, int b)
{
    return a+b;
}

public void ExampleMethod(int a, int b, int c=ChangeC(a,b))
{
}
Johannes Pertl
quelle
4
Nein, da die Parameter für diese Methode in diesem Kontext nicht vorhanden sind. Sie können es einfach in der ersten Zeile Ihrer Methode verwenden: c = c ?? ChangeC (a, b)
Glenn van Acker
Bitte geben Sie ein Beispiel in Pseudocode. Es ist etwas unklar, was Sie erreichen wollen.
Alex
Sie könnten zwei Überladungen der Methode haben - eine mit drei Parametern und eine mit zwei, die die erste aufruft, wobei die Ergebnisse des Funktionsaufrufs als dritter Parameter verwendet werden
PaulF

Antworten:

8

Einer der Wege:

private int ChangeC(int a, int b)
{
    return a+b; 
} 

public void ExampleMethod(int a, int b, int? c=null)
{
    c = c ?? ChangeC(a,b);
}
Gleb
quelle
16

Nein das ist nicht möglich. Damit ein Parameter optional ist, muss der Wert eine Kompilierungszeitkonstante sein. Sie können die Methode jedoch folgendermaßen überladen:

private int ChangeC(int a, int b){
    return a+b;
}

public void ExampleMethod(int a, int b, int c) {}

public void ExampleMethod(int a, int b)
{
    ExampleMethod(a, b, ChangeC(a, b));
}
MindSwipe
quelle
3

Ist es möglich, den Rückgabewert einer Funktion anstelle eines bestimmten Werts als optionalen Parameter in einer Funktion zu verwenden?

Nein, das ist nicht möglich. Der C # -Programmierleitfaden zu optionalen Argumenten lautet:

Ein Standardwert muss eine der folgenden Arten von Ausdrücken sein:

  • ein konstanter Ausdruck;

  • ein Ausdruck der Form new ValType(), wobei ValTypees sich um einen Werttyp handelt, z. B. eine Aufzählung oder eine Struktur ;

  • Ein Ausdruck des Formulars default(ValType), wobei ValTypees sich um einen Werttyp handelt.

Weitere Antworten finden Sie in anderen Antworten.

Theraot
quelle