Ich habe eine Liste, ich; nur mit bestimmten Kriterien mit LinQ / LAMBDA auswählen
Mein Code ist
%Vor% Ich erhalte einen Fehler "Nur Zuweisung, Aufruf, Inkrement, Dekrement und neue Objektausdrücke können als Anweisung verwendet werden" in diesem Teil x.IsAnimal == false
Ich weiß, dass wir dies mit einer for-Schleife leicht erreichen können, aber ich möchte mehr lernen, indem ich LinQ / LAMBDA
verwende Das funktioniert nicht, weil Sie false{}
construct nicht haben können.
Bitte lesen Sie die Syntax von Lambda-Ausdrücken : Ein Lambda-Ausdruck repräsentiert eine Methode; der Teil vor dem =>
ist die Liste der Parameter, und der Teil danach ist entweder ein einzelner Ausdruck, dessen Ergebnis zurückgegeben wird, oder ein Methodenkörper.
Sie können Ihre Einschränkung innerhalb des Methodenkörpers hinzufügen:
%Vor%Sollte etwa so aussehen:
%Vor%Ich kann sehen, dass sich Leute darüber beschweren, dass sie eine neue Liste erstellen müssen, um ForEach zu verwenden. Sie können dasselbe mit Select tun und bei IEnumerable bleiben:
%Vor%Bitte beachten Sie, dass ein Unterschied zwischen lists.foreach und einer normalen foreach ist. Ein 'normal' für jeden verwendet einen Enumerator, was es illegal macht, die Liste zu ändern, die iteriert wird. Die lists.foreach () verwendet keinen Enumerator (wenn ich mich nicht irre, verwendet sie einen Indexer im Hintergrund), der es ermöglicht, Elemente im Array zu ändern, während Sie gehen.
Hoffe, das hilft
Wenn Sie "ForEach" für verschiedene Arten von Sammlungen verwenden möchten, sollten Sie eine Erweiterung für IEnumerable schreiben:
%Vor%Mit dieser Erweiterung können Sie vor der Verwendung von ForEach filtern und müssen keine neue Liste mit den gefilterten Elementen erstellen:
%Vor%Ich bevorzuge die Standardversion:
%Vor%Nicht sehr lang und deutlich eine Schleife mit Nebeneffekten.