Anonyme Delegate mit optionalen Paramateer


Halfbax

Erfahrenes Mitglied
#1
Hallo,

ich meld mich mal wieder mit einem Problem zurück. Ich habe ein Delegate und möchte dessen Parameter optional mache, aber wenn ich es dann gleich null im Parameter deklariere, funktioniert der Delegat ohne Parameter trotzdem nicht.


C#:
public void AddButton(string text, Action<Dictionary<string, string>> callback = null, string icon = "fa-mouse-pointer", string color = "#2980b9")
Funktioniert
C#:
test.AddButton("Anmelden", (Dictionary<string, string> inputValues) =>
                {}, "fa-sign-in");
Funktioniert nicht
C#:
test.AddButton("Test", () =>
                {}, "fa-sign-in");
 

Spyke

Capoeirista
Premium-User
#2
delegates sind ja nixs anderes als die kopfbeschreibungen einer methode.
Eine art datentyp beschreibung für methoden um deren Speicheradressen weiterzugeben und an anderen stellen die entsprechende Methode auszuführen.
Sprich ein zeiger für ein Methodenaufruf.

Wenn du dir kompilierten Code im Reflector ILSpy oder so anschaust, siehst du auch das bei optionalen parametern der Wert beim Aufruf mit reincompiliert wird.
Das allein ist eigentlich schon mit ein hauptgrund warum ich optionale parameter nicht verwende, wird der optionale Wert geändert müssten dennoch alle dlls neu compiliert werden die diese methode aufrufen.
 

Halfbax

Erfahrenes Mitglied
#3
Ja, gut. Ich werde dennoch den Fall haben, dass ich Buttons erstellen muss, die keine inputValues ala Dictionary benötigen. Und für diesen Fall möchte ich diese Button-Funktion so umändern, dass das Dictionary optional ist.
 

Halfbax

Erfahrenes Mitglied
#4
Ich habe gerade echt keinen Plan, wie ich das Ganze aufbauen soll. Würdet Ihr mir vielleicht eine Lösung basteln? Dann hätte ich eine Musterlösung für die Zukunft. Das wäre echt hilfreich :)
 

Spyke

Capoeirista
Premium-User
#5
warum nicht einfach null beim aufruf übergeben?

ansonsten 2tes delegate ohne dictionary parameter.
(Muss natürlich dann auch entsprechend eine aufrufbare Methode ohne diesen Parametern existieren)