Ich frage mich, ob das eine vernünftige Schlüsselwahl für ein Wörterbuch ist? Ich möchte einen Ausdruck als Schlüssel in einem Wörterbuch verwenden, etwa wie folgt:
%Vor%Die Idee ist, dass dies eine sauberere Methode ist als große if-else- oder switch-Anweisungen.
Macht das Sinn? Wird es funktionieren? Gibt es einen einfacheren Weg?
Nein, C # erstellt eine neue Delegateninstanz, wenn ein Lambda verwendet wird, sodass Sie es nicht als konsistenten Schlüssel verwenden können. Beispiel:
%Vor%Dies würde dann die Verwendung als Dictionary-Schlüssel umständlich machen, es sei denn, Sie hätten eine andere Möglichkeit, immer dieselbe Instanz zu erhalten.
Bearbeiten:
Eric Lipperts Antwort hier zeigt an, dass der Compiler erlaubt ist, um die Lambdas zu erkennen Gleiches (obwohl dies normalerweise nicht der Fall ist). In beiden Fällen ist ein Lambda / Delegierter eine schlechte Wahl für einen Schlüssel.
In Anbetracht der Art, wie Sie Ihre Map verwenden, sind Sie mit einem List<Tuple<Func<int,bool>,int>>
besser dran, weil die Reihenfolge der Überprüfung der Lambdas nicht mehr beliebig ist, wie in einem Hash-basierten Wörterbuch. Mit dieser Methode können Sie auch den Suchschritt überspringen:
Tags und Links c# dictionary func