Ist es möglich, diese C # if-Anweisung (..) umzuformen?

7

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:)

BEARBEITEN

Ich frage mich, ob eine Lambda-Expression-Erweiterung dies tun könnte? : P

    
Pure.Krome 03.04.2010, 11:24
quelle

7 Antworten

13

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.

    
Seth Petry-Johnson 03.04.2010, 11:33
quelle
3

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:

%Vor%

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.

    
Mark Byers 03.04.2010 11:33
quelle
2

Sie könnten dafür eine Erweiterungsmethode verwenden:

%Vor%

Verwendung:

%Vor%     
Stormenet 03.04.2010 11:38
quelle
1

Sie können switch mit Fallthrough verwenden (ein hässliches Erbe der C-Syntax):

%Vor%

Funktioniert aber nur für solche trivialen Beispiele, und ich würde vorschlagen, in diesem Fall trotzdem bei if zu bleiben.

    
Joey 03.04.2010 11:26
quelle
1

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.

    
Eskat0n 03.04.2010 11:51
quelle
0

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.

    
Larry Watanabe 03.04.2010 11:57
quelle
0

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

    
Sunny 03.04.2010 11:52
quelle