Können Operationen verallgemeinert werden?

8

Ich habe gerade diesen Code geschrieben:

%Vor%

Es scheint sehr sich wiederholend. Gibt es eine Möglichkeit, dies zu verallgemeinern? Also muss ich nicht 4 Zeilen haben, die die gleichen sind, außer ein anderes Zeichen?

(Hinweis: Wenn es einen besseren Weg gibt, der OperationEnum nicht nutzt, ist das großartig)

    
Vaccano 21.01.2011, 21:05
quelle

8 Antworten

1

Es sieht für mich richtig aus, obwohl ich dafür eine switch -Anweisung verwenden würde. Aber vielleicht verstehe ich nicht, was Sie versuchen zu tun?

%Vor%

Es ist im Wesentlichen das Gleiche, aber es sieht zumindest hübscher aus.

    
Justin Morgan 21.01.2011, 21:07
quelle
3

Sie können eine Dictionary<OperationEnum, Func<double, double, double>> :

erstellen %Vor%     
SLaks 21.01.2011 21:08
quelle
1

Sie können ein Verzeichnis von Delegaten erstellen, sodass Ihre Funktion ungefähr wie folgt aussieht:

%Vor%     
Elalfer 21.01.2011 21:08
quelle
1

Ja, mit List<Func<double, double, double>> :

List<T> accessor arbeitet viel schneller als Dictionary & lt; & gt; Accessor und vergleichbar mit Switch-Anweisung;)

%Vor%     
Artur Mustafin 21.01.2011 21:10
quelle
0

Nein ... es ist nicht ganz so verallgemeinerbar, obwohl ich wünschte, es wäre es auch. : \

    
Mehrdad 21.01.2011 21:08
quelle
0

Ein Schalter wäre mindestens hübscher :) und der Code wird effizienter (Array-Lookups etc.). Darüber hinaus können der Compiler und die IDE Ihnen Hinweise geben, wenn Sie bestimmte Optionen verpassen.

Aber wie in meinem Kommentar gesagt, ist dies nicht wirklich eine Antwort, nur allgemeine Verbesserung des Codes.

%Vor%     
Lasse Espeholt 21.01.2011 21:09
quelle
0

Dies sollte es tun, aber ich glaube, eine switch-Anweisung wäre die effizientere.

%Vor%

ODER

%Vor%

Dann ...

%Vor%     
Chris Gessler 30.01.2011 18:08
quelle
0

Ich bin mir nicht sicher über den Kontext, aber anstatt der Enumeration könnten Sie einen Delegaten verwenden, der die gewünschte Operation ausführt, die in Ihre "PerformOperation" -Methode übernommen wird. Allerdings benötigen Sie diese statische Methode wahrscheinlich nicht, wenn Sie diesen Ansatz verwenden würden. Ein weiterer Vorteil ist, dass Sie sich nicht um den speziellen Fall kümmern müssen, in dem der Vorgang nicht unterstützt wird, und jeder Vorgang unterstützt wird. Hier ist ein kurzes Beispiel:

%Vor%

Mit diesem Ansatz können Sie Ihr Programm problemlos um neue Operationen erweitern, ohne die PerformOperation-Methode zu berühren. Dies kann einige Schritte weiter gehen, aber ohne den Kontext zu kennen, ist es schwer zu beschreiben.

    
Patrik Hägne 30.01.2011 18:36
quelle

Tags und Links