c# Optionale Parameter Func
In C# habe ich folgende definition einer Funktion:
public static TResult SomeParentFunctionName<TSource, TResult>(TSource SomeValue,Func<TSource, TResult> ChildFunction1, Func<TSource, TResult> ChildFunction2)
Diese Funktion nimmt SomeValue
und ruft dann ChildFunction1
und ChildFunction2
Laut meinem business-Regeln, ich immer ausführen müssen ChildFunction1
, aber nur manchmal ausführen müssen ChildFunction2
.
Kann ich machen ChildFunction2
einen optionalen parameter? Wie kann ich dies tun? Und wie weiß ich, wenn es wurde übergeben.
Optionen habe ich überlegt:
1) ich konnte erzeugen zwei SomeParentFunctionName
Funktionen, mit ChildFunction2
und eine ohne.
2) konnte ich-pass-in eine leere Funktion, die einfach nicht alles tun - aber das ist keine gute Praxis.
Hinweis: für diejenigen, die beginnen zu Schreien auf diese Frage, wenn Sie können nicht helfen, einfach nicht.
- Was bestimmt, Wann Sie ausgeführt werden müssen
ChildFunction2
? Wissen Sie, Sie haben, um es auszuführen, bevor der Anruf zuSomeParentFunctionName
? Weil wenn ja, ich würde sagen, eine überlastung ist wahrscheinlich der direkteste Weg zu gehen. - Der Benutzer, der den Aufruf
SomeParentFunctionName
schon weiß, obChildFunction2
aufgerufen werden. Recht. Das ist eine meiner überlegungen. Können Sie denken, von einem anderen Weg, es zu tun? - Sie könnte pass in
null
(das habe ich noch nie gemocht) oder verwenden Sie ein optional parameter und setzen Sie es auf null, das ist sauberer.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicher, nur setzen Sie ihn auf null:
Wenn Sie übergeben möchten in einem func-für
ChildFunction2
haben, gehen Sie voran und es tun. Wenn Sie nicht wollen, zu passieren, nichts, einfach weglassen, wenn Sie die Funktion aufrufen.Dies ist eigentlich genau das, was Sie nennen es - optionales argument
Gibt es eine 3. option. Verwenden Sie die
params
Schlüsselwort, um anzugeben, dass die Funktion nimmt eine variable Anzahl von Argumenten. Aber, dann müssen Sie behandeln den Fall, wo keineFunc<TSource, TResult>
Objekte übergeben werden.Wenn Ihr immer gehen zu müssen, entweder 1 oder 2
Func<TSource, TResult>
Objekte, dann überladen Sie die Funktion wie Sie vorschlagen, in option 1 ist der häufigste Weg, um mit der situation umzugehen.Sicher, so geben Sie einen Standardwert von
null
:dann überprüfen Sie einfach für
null
: