Verwendung von Bedingungsoperator in Lambda-Ausdruck in ForEach () in einer allgemeinen Liste?

7

Ist es nicht erlaubt, einen Bedingungsoperator in einem Lambda-Ausdruck in ForEach zu haben?

%Vor%

Kompilierungsfehler - & gt; "Nur Zuweisungen, Aufrufe, Inkremente, Dekremente und neue Objektausdrücke können als Anweisung verwendet werden"

Der Versuch, ein normales if zu verwenden, funktioniert auch nicht:

%Vor%

Einfach nicht möglich?

    
Jamezor 29.11.2009, 21:40
quelle

4 Antworten

26

Sie verwenden die kürzere Form der Lambda-Ausdrücke, die nur einen einzigen Ausdruck erlauben.
Sie müssen die lange Form, die mehrere Anweisungen erlaubt.

Zum Beispiel:

%Vor%     
SLaks 29.11.2009, 21:44
quelle
5

Was versuchst du zu erreichen? Versuchen Sie eine Zeichenfolge mit kommagetrennten Elementen zu erstellen, in der sie einen bestimmten Wert enthalten? In linq erreichen Sie dies folgendermaßen:

%Vor%

Die Ausgabe von dieser ist "Gegenstand, den ich mich interessiere, Gegenstand, um den ich mich kümmere, Gegenstand, um den ich mich kümmere".

Hinweis: Aggregieren ist eine großartige Möglichkeit, um sicherzustellen, dass kein abschließendes ","

vorhanden ist     
Matt Breckon 29.11.2009 21:52
quelle
4

Das Problem war dieser Ausdruck

%Vor%

ist keine Aussage . Es gibt nur einen Wert zurück, der den Typ string hat.

Es gibt einen Trick, damit es funktioniert (nur zum Spaß):

%Vor%

Ich habe einfach den Aufruf der .GetType() -Methode hinzugefügt, um eine Anweisung aus dem ersten Ausdruck zu erstellen und sie zu kompilieren.

    
Roman Boiko 29.11.2009 22:22
quelle
1

Versuche Klammern:

%Vor%

+ = hat eine höhere Priorität als?, daher können Sie den Fehler erhalten. In Klammern kann der Fehler verschwinden. Nicht 100% sicher, aber ... Lambda-Ausdrücke können zusätzliche Einschränkungen haben, die die Verwendung von Zuweisungsanweisungen verhindern.

UPDATE:

Statt mehrerer + = Anweisungen ist es viel sauberer, die Bedingung auf die rechte Seite der Zuweisung zu setzen, etwa so:

%Vor%

UPDATE 2:

Aber es ist noch besser, Aggregate () zu verwenden, da es genau für dieses Szenario entworfen wurde. Hier ist ein Beispiel:

%Vor%

Aber ich denke @Matt Breckons Antwort (die ich gerade gesehen habe, als ich das hier posten wollte) ist sogar besser als mein Beispiel, da es sich um das Entfernen des Terminals "," handelt. Schau dir seine Antwort an ...: -)

    
Justin Grant 29.11.2009 21:45
quelle