EDIT : Ups - wie richtig bemerkt, gäbe es keine Möglichkeit zu wissen, ob der Konstruktor für die betreffende Klasse empfindlich darauf reagiert, wann oder wie oft er aufgerufen wird, oder ob der Zustand des Objekts während der Methode geändert wird, so dass er jedes Mal von Grund auf neu erstellt werden müsste. Ignorieren Sie das Dictionary und betrachten Sie nur die Delegaten, die im Laufe einer Methode in-line erstellt werden :-)
Angenommen, ich habe die folgende Methode mit Dictionary of Type to Action local variable.
void TakeAction(Type type)
{
// Random types chosen for example.
var actions = new Dictionary<Type, Action>()
{
{typeof(StringBuilder), () =>
{
// ..
}},
{typeof(DateTime), () =>
{
// ..
}}
};
actions[type].Invoke();
}
Das Dictionary wird immer gleich sein, wenn die Methode aufgerufen wird. Kann der C#-Compiler dies bemerken, es nur einmal erstellen und es irgendwo für die Verwendung in zukünftigen Aufrufen der Methode zwischenspeichern? Oder wird es einfach jedes Mal von Grund auf neu erstellt? Ich weiß, es könnte ein Feld der Klasse sein, die es enthält, aber es scheint mir schöner, wenn so etwas in der Methode enthalten ist, die es verwendet.