einfache Frage: -
Ich habe die folgenden einfachen if (..) Anweisungen: -
%Vor%ist es möglich, diese in etwas wie ... umzuwandeln.
DISCLAIMER: Ich weiß, dass das nicht kompiliert .. aber das ist sorta, was ich versuche zu bekommen ...
%Vor%Prost:)
Ich frage mich, ob eine Lambda-Expression-Erweiterung dies tun könnte? : P
Ich erstelle normalerweise eine Erweiterungsmethode namens IsIn()
, die ein generisches Parameterarray vom Typ <T>
nimmt und dann .Contains()
aufruft, wobei die Instanz übergeben wird, auf der die Erweiterung aufgerufen wird.
Es sieht aus wie if (foo.IsIn(foo1, foo2))
. Sehr einfach zu schreiben, super einfach zu bedienen.
In diesem speziellen Fall, in dem Sie nur zwei Optionen haben, ist es nicht viel, aber wenn es viele Optionen geben könnte, können Sie die Optionen lieber in eine Liste einfügen und dann Contains
wie folgt verwenden:
Diese Methode funktioniert auch bei anderen Typen als enums
, einschließlich Typen, für die Sie switch
nicht verwenden können. Es ist auch nützlich, wenn die Liste der zulässigen Werte nur zur Laufzeit bekannt ist.
Beachten Sie, dass jedes Mal, wenn Sie eine neue Liste erstellen, eine Leistungseinbuße auftritt.
Ich weiß nicht wirklich viel über .NET 4.0 (mit 3.5 für jetzt), aber ich denke, es gibt keine Möglichkeit, Pure.Krome Wirkung zu erzielen.
Aber die Annäherung an diese Art des Vergleichens kann durch Verwendung von Arrays und Erweiterungsmethoden erreicht werden, die LINQ bereitstellt.
Hier ist das kleine Beispiel.
%Vor%Dies gibt aus:
%Vor%Dieser Weg verschlingt mehr Ressourcen als eine einfache Kette von Vergleichen und logischen Operatoren, bietet aber eine Syntax, die einem Pure.Krome ähnelt.
Wenn Sie Arrays nicht mit new [] definieren wollen (es ist in logischen Bedingungen wirklich etwas ungemütlich), können Sie sich dafür eine Erweiterungsmethode definieren.
%Vor%So können Sie diese Erweiterungsmethode verwenden:
%Vor%Die Ausgabe ist wirklich vorhersehbar, heh.
Ich denke, eine bessere Frage ist, warum sollte man sich überhaupt darum sorgen? Es ist klar, wie es steht. Ich wette, wenn Sie mehr von Ihrem Code gepostet haben, würde es viele andere Dinge geben, die zuerst angesprochen werden sollten.
Ein weiterer Weg, dies zu tun, ist, die Regeln zu trennen & amp; die Logik, die ausgeführt werden muss, wenn eines / alle von ihnen wahr sind:
%Vor%Dann können Sie die Regel mit den .Any () und / oder All () konsumieren, um die entsprechenden Operationen wie:
auszuführen %Vor%HTH
Tags und Links .net .net-4.0 refactoring if-statement