Wörterbuch mit Func als Schlüssel

8

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?

    
user380689 16.11.2012, 02:15
quelle

2 Antworten

7

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.

    
mike z 16.11.2012, 02:27
quelle
6

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:

%Vor%     
dasblinkenlight 16.11.2012 02:28
quelle

Tags und Links