# Anonyme Delegate mit optionalen Paramateer



## Halfbax (21. April 2017)

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.



```
public void AddButton(string text, Action<Dictionary<string, string>> callback = null, string icon = "fa-mouse-pointer", string color = "#2980b9")
```

Funktioniert

```
test.AddButton("Anmelden", (Dictionary<string, string> inputValues) =>
                {}, "fa-sign-in");
```

Funktioniert *nicht*

```
test.AddButton("Test", () =>
                {}, "fa-sign-in");
```


----------



## Spyke (21. April 2017)

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 (21. April 2017)

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 (21. April 2017)

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 (24. April 2017)

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)


----------

