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?
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 istDas 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.
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 ...: -)
Tags und Links c# lambda .net-3.5 conditional-operator